본문 바로가기

Language/Java(TestCode)

[TestCode] Mock 객체 만들기 Mockito (JUnit5) - 사용이유 : 테스트 코드에서 객체 생성시 Mokito를 활용하여 임의로 생성해주어 번거로움을 줄일 수 있다. Mockito.mock() 메소드를 활용하여 만드는 법 @Test void createLunchService() { // mock() 메소드로 만드는 방법 LunchRepository lunchRepository = mock(LunchRepository.class); LunchService lunchService = new LunchService(lunchRepository); assertNotNull(lunchService); } - Mockito가 없다면 위 객체를 만들어주는데 필요한 구현체를 모두 구현해 줘야하기때문에 장황한 코드가 발생하지만 Mockito를 활용하여 위처럼 짧고 간결하게.. 더보기
[TestCode] junit-platform.properties 설정파일 (JUnit5) - Junit 설정 파일로, 클래스 패스 루트 (src/test/resources/)에 넣어두면 적용된다. - 파일 생성시 클래스 패스로 인식하지 않을 수 있다. 그런 경우 아래와 같이 설정해주면 된다. - File -> Project Structure -> Modules -> 해당 디렉터리를 Test Resorces로 설정 # 테스트 인스턴스 라이프사이클 설정 junit.jupiter.testinstance.lifecycle.default = per_class - 위처럼 해당 파일에 per_class로 설정해주게되면 전체 테스트 코드는 per_class로 실행되는 걸 확인할 수 있다. - 클래스에서 @Testinstance 어노테이션을 제거해도 위처럼 하나의 인스턴스로 동작하는걸 확인할 수 있다. @T.. 더보기
[TestCode] @TestMethodOrder 테스트 순서 (JUnit5) - 테스트 코드는 내부적으로 정해져있는 순서에 맞춰 실행되기때문에 여러번 실행을 해도 동일한 순서로 동작한다. (junit 내부 로직 변화에 따라 변할 수 있다) @TestMethodOrder : 테스트 메소드를 원하는 순서에 따라 실행하도록 해준다. @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class LunchTest { ``` @Order(1) @custom @DisplayName("테스트 순서 1") void order1_ex() { System.out.println("첫번째 테스트"); } @Order(3) @custom @DisplayName("테스트 순서 3") void order3_ex() { System.out.println("세번째 .. 더보기
[TestCode] @TransInstance 테스트 인스턴스 (JUnit5) - Junit은 테스트 메소드 마다 테스트 인스턴스를 새로 만든다. - 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위해서 @custom @DisplayName("테스트 인스턴스") void instance_ex() { System.out.println("value test1 = " + value++); System.out.println("instance test1 = " + this); } @custom @DisplayName("테스트 인스턴스2") void instance2_ex() { System.out.println("value test2 = " + value++); System.out.println("instance test1 = " + this); } - 실제로 위 코드를.. 더보기
[TestCode] @RepeatedTest, @ParameterizedTest 테스트 반복하기 (JUnit5) @RepeatedTest : 반복 횟수와 반복 테스트 이름을 설정할 수 있다. @RepeatedTest(10) // 10번의 테스트 반복 void repeatTest(RepetitionInfo repetitionInfo) { // 매개변수 통하여 현재 테스트 정보를 얻어옴 System.out.println("현재 " + repetitionInfo.getTotalRepetitions() + " 개의 테스트중 " + // 총 테스트 수 repetitionInfo.getCurrentRepetition() + " 번 실행중"); // 현재 진행중인 테스트 번호 } - 테스트 반복 횟수를 설정하고 매개변수를 통하여 테스트의 정보를 받아올 수 있다. - @RepeatedTest 어노테이션엔 2개의 매개변수를 넣어줄.. 더보기
[TestCode] @interface 커스텀 태그 (JUnit5) Junit5 애노테이션을 조합하여 커스텀 태그를 만들 수 있다. @Target(ElementType.METHOD) // 메서드에 사용이 가능하다. @Retention(RetentionPolicy.RUNTIME) // 애노테이션 정보를 런타임 까지 유지되도록 @Tag("local") // 태그가 local 환경이다. @Test public @interface custom { } - 커스텀태그를 위와 같이 생성하였다. - 위처럼 태그생성 후 테스트 코드 메서드에 이 애노테이션을 사용할 수 있다. @custom // @Test , Tag("local") 어노테이션 생략가능 @DisplayName("커스텀 태그") void custom_tag_ex() { Lunch lunch = new Lunch(); asse.. 더보기
[TestCode] @Tag 태깅과 필터링 (JUnit5) @Tag : 테스트 메소드에 여러 태그를 추가할 수 있다. @Test @DisplayName("태깅 그룹 local") @Tag("local") void tag_local_ex() { Lunch lunch = new Lunch(); assertTrue(lunch.getLunch("test").equals("Complete")); } @Test @DisplayName("태깅 그룹 dev") @Tag("dev") void tag_dev_ex() { Lunch lunch = new Lunch(); assertTrue(lunch.getLunch("test").equals("Complete")); } - 위처럼 코드 구성시 local, dev라는 2개의 태그로 나뉘게 된다. - 그대로 실행시에는 두 태그에 해당하.. 더보기
[TestCode] assume 조건에 따라 테스트 실행 (JUnit5) assumeTrue : 조건 - 조건을 정해주고 해당조건에 적합한지 체크한다. @Test @DisplayName("조건에 맞춰 실행") void assume_ex() { Lunch lunch = new Lunch(); String test_env = "LOCAL"; assumeTrue("LOCAL".equals(test_env)); assertTrue(lunch.getLunch("test").equals("Complete"), () -> "실패시 메시지"); } - 현재 테스트 하는 환경을 예로 들어 LOCAL환경인지 개발환경인지 실서버 환경인지 여부를 체크하여 다음에 실행될 테스트 코드를 실행할지 여부를 정할 수 있다. 만일 위 코드에서 LOCAL 환경이 아니라면 다음 테스트는 실행되지 않을것이다. -.. 더보기