from Dictionary - JUnit

Junit

Annotation

Annotation Description    
@Test 메소드가 테스트 메소드임을 나타낸다.    
@ParameterizedTest 매개변수가 있는 테스트임을 나타낸다.    
@ValueSource 반복 테스트에서 지정한 배열을 파라미터 값으로 순서대로 넘겨준다. (하나의 인수일 경우)    
@NullSource Null로 값을 전달할 떄 사용한다.    
@EmptySource 빈 값을 인수로 전달할 때 사용한다.    
@NullAndEmptySource Null, Empty 모두 전달할 때 사용 @CsvSource 테스트 입력값을 Csv로 구성하여 던질 떄 사용한다.
@EnumSource 열거형의 배열을 테스트 메소드에 전달    
@MethodSource Arguments로 파라미터를 여러 개 전달할 떄 사용한다. (Arguments.of(value, value….))    
@RepeatedTest 메소드가 반복 테스트 메소드임을 나타낸다.    
@DisplayName 테스트 클래스 또는 메소드에 대한 사용자 지정 표시 이름    
@DisplayNameGeneration 테스트 클래스 이름 생성기를 선언한다. *    
@BeforeEach @Test, @RepeatedTest, @ParameterizedTest, @TestFactor 전에 실행되는 것을 나타낸다.
테스트 마다 실행 전에 실행된다.
매 테스트마다 초기화해야 하는 경우 사용된다.
   
@AfterEach @Test, @RepeatedTest, @ParameterizedTest, @TestFactor 후에 실행되는 것을 나타낸다.
테스트 마다 실행 후에 실행된다.
매 테스트 후 정리해야 하는 경우 사용된다.
   
@BeforeAll @BeforeEach 와 유사하지만 static 메소드여야만 하며 테스트 전에 한 번만 실행된다.    
@AfterAll @AfterEach 와 유사하지만 static 메소드여야만 하며 테스트 후에 한 번만 실행된다.    
@Nested 주석이 달린 클래스가 중첩 테스트 클래스임을 나타낸다.    
@Tag 클래스, 메소드 수준 테스트 필터링을 위해서 사용한다.    
@Disabled 테스트 클래스, 메소드를 비활성화할 때 사용한다.    
@Timeout 테스트 타임아웃을 지정한다.    
@ExtendWith 확장을 선언적으로 등록할 때 사용한다.    
@RegisterExtension 필드를 통해 프로그래밍 방식으로 확장을 등록할 떄 사용한다.    
@TempDir 테스트 메소드에서 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공    
@TestFactory 동적 테스트를 위한 테스트 팩토리임을 나타낸다.    
@TestTemplate      
@TestClassOrder @Nested 간 실행 순서를 구성하는 데 사용한다.    
@TestMethodOrder 테스트 메소드간 순서를 구성하는 데 사용한다. @    
@TestInstance 주석이 달린 테스트 클래스의 인스턴스 수명 주기를 구성하는데 사용한다.    
@Sql sql 파일을 지정하여 Dao 단위 테스트에 미리 구성된 쿼리를 실행한다.    
class Junit {
    @TestFactory
    Stream<DynamicTest> testFactory () {
        List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        return numbers.stream()
                      .forEach( num -> dynamicTest(
                              num,
                              () -> assertThat(number < 10).isTrue()
                      ));
    }

    @ParameterizedTest
    @ValueSource(ints = {1,2,3,4,5,6,7,8,9,10})
    public isUnderThen(int number){
        assertThat(number < 10).isTrue();
    }
}

Spring Test Annotations

Controller Test

| Annotation | Description | |:————————————————————————————————————————————————————–|:————————————————————————————-:| | @SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
properties = “spring.profiles.active=[profile]”
) | SpringBootTest임을 알린다. 이 어노테이션이 붙으면 SpringContext를 실행하고 Component 스캔 등을 한다. (스프링을 켠다.) | | @AutoConfigureMockMvc | 서블릿 컨테이너를 모킹한다. | | @TestPropertySource | 테스트 환경의 Property를 지정할 수 있다. (classpath:로 resource 내부에서 찾는건 덤 -> build에서 찾는다.) | | @ActiveProfiles | Active로 둘 Profile를 지정한다. |

Object Description
@Autowired
MockMvc
테스트용 MVC환경을 만들어 요청, 전송, 응답을 제공하는 클래스
@LocalServerPort
int port
현재 mocking 혹은 지정된 포트를 반환한다. (RandomPort의 경우)
//ex)

@Test
@DisplayName(value = "ContextLoadTest")
void contextLoads() throws Exception {
        System.out.println("ContextLoaded");

        //given
        String expect = "junitTest";

        //when
        mockMvc.perform(
        get("/v1/user/test")
        .contentType(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON)
        )
        //that
        .andExpect(MockMvcResultMatchers.status().isOk())
        .andExpect(jsonPath("$",expect).exists());

        }

ServiceTest

| Annotation | Description | |:————|:——————————————–:| | @ExtendWith | 단위 테스트에 공통적으로 사용할 확장 기능을 선언한다. | | @Mock | Mock 객체를 생성 메소드는 있지만 내부 구현이 없다. | | @Spy | 모든 기능을 가지고 있다. 다만 Stub을 하면 해당 부분만 Mocking된다. | | @InjectMock | @Mock, @Spy로 생산한 객체를 주입한다.(생성자 주입으로 추정된다.) |

RepositoryTest

| Annotation | Descpription | |:—————————————————————————————————————————————————-|:————————————————————:| | @DataJpaTest(
  showSql = true,
  properties = {“classpath:application.yml”},
  includeFilters = {}
) | SpringContext 중 Repository에 관련된 요소들만 테스트하기 위해서 사용하는 어노테이션이다. | | @AutoConfigureTestDatabase(connection=””, replace=””) | TestDB를 구성할 때 유용한 어노테이션이다. 테스트 시 DB를 테스트 DB로 대체할 수 있다. |