JUnit 5: 테스트 반복하기
@RepeatedTest
반복 테스트를 위한 테스트 템플릿 입니다
다음과 같이 인자로 value는 10을 전달하면 총 10번 테스트를 반복하며 테스트할때 정확히 볼 수 있게 name 인자값도 정할 수 있습니다.
또한 RepetitionInfo라는 클래스를 활용해서 현재 반복 횟수와 총 반복 횟수 등의 정보를 제공합니다
실행 결과
@ParameterizedTest 와 @ValueSource
- 테스트에 여러 매개변수를 대입해가며 반복 실행할 수 있습니다
- @ParameterizedTest 를 이용한 파라미터화된 테스트는 하나의 테스트를 각기 다른 인수로 여러 번 실행할 수 있게 합니다
- 파라미터화 된 테스트를 정의하려면 반드시 하나 이상의 source를 선언해야 합니다
출력 결과
message = 날씨가
message = 많이
message = 추워지고
message = 있네요
@ValueSource에는 source로 int도 가능합니다
@ValueSource(ints = {10,20,30})
그리고 테스트에서 받을 인자는 source가 int타입이라고 테스트 메서드에서도 int로 받지 않아도 됩니다
JUnit에서는 암묵적 타입 변환도 가능합니다
어떤 것을 타입 변환을 할 수 있는지 여기서 확인을 하시면 됩니다
또한 객체로도 타입을 변환 할 수 있습니다
SimpleArgumentConverter 상속받은 구현체를 제공하여 @ConvertWith와 함께 명시적으로 타입을 변환하면 됩니다
@CsvSource
여러 인자를 한번에 받아오는것도 가능합니다
아래 예제와 같은 경우 (10,'자바 스터디') (20,스프링)을 테스트를 했습니다
실행결과
다음과 같은 방식으로도 바꿀 수 있습니다
JUnit 5 : 테스트 인스턴스
문제를 하나 내겠습니다
다음과 같은 테스트 코드가 있습니다
통합 테스트를 진행했을때 각각의 value는 뭐라고 출력이 될까요?
보통 생각을 하면 CalculateTest클래스의 인스턴스를 생성하고 테스트를 진행하니 각각 1,2 로 찍힐 것이라고 예상됩니다
실행결과
하지만 예상과 다르게 둘 다 1이 찍힙니다. Calculate클래스의 인스턴스를 생성하고 모든 테스트 메서드를 실행하는데 하나의 인스턴스에서 이 두개의 테스트를 모두 실행하는 것이 아닌 각 테스트마다 새로운 인스턴스를 생성합니다
이는 단위테스트간에 의존성을 줄이려는 전략으로 새롭게 인스턴스를 생성하도록 한 것입니다
인스턴스의 주소를 찍어보면 다름을 확인할 수 있습니다
그런데 JUnit5부터는 이 전략을 바꿀 수 있게 되었습니다. 즉 클래스당 하나의 인스턴스만을 만들어서 공유할 수 있는 방법이 있습니다
@TestInstance
@TestInstance에 인자로 Lifecycle.PER_CLASS를 전달하면 클래스당 하나의 인스턴스만을 만들 수 있습니다
이는 테스트마다 새로운 인스턴스를 생성하지 않고 오직 하나만의 인스턴스를 생성하기에 성능적인 면에 장점을 보입니다
실행결과
또한 BeforeAll은 모든 테스트 인스턴스에서 딱 한번만 실행되는 메서드 이기에 static 메소드를 붙였어야 했는데 위 전략을 사용하면 클래스마다 하나의 인스턴스만을 만들기 때문에 static을 빼도 됩니다
테스트 순서
테스트 순서는 내부 로직에 따라 실행되는데 항상 같은 순서를 반복하지 않습니다 그렇다고 이 로직을 또 공개하지는 않습니다.
왜냐하면 단위테스트간에 의존성이 있어서는 안되기에 순서를 중요하게 생각하지 말라는 JUnit5의 의도가 숨겨져 있습니다. 하지만 경우에 따라서는 원하는 테스트 순서대로 하고 싶을 때가 생깁니다. 예를들어 가입=>로그인=>개인페이지 같이 시나리오 테스트를 할 때 상태 정보를 유지하면서(데이터를 공유하면서) 테스트를 진행해야 하는데 이때 JUnit5에서 순서를 정의할 수 있는 어노테이션이 등장했습니다
@TestMethodOrder
각 테스트마다 Order 어노테이션으로 순서를 부여하며 테스트 순서를 정할 수 있습니다. 이때 Order 어노테이션은 스프링 프레임워크의 @Order가 아니고 test의 @Order이니 구별을 잘 하시길 바랍니다
실행결과
출처
https://www.inflearn.com/course/the-java-application-test/dashboard
'공부방 > JAVA' 카테고리의 다른 글
제어문 - 백기선 자바라이브스터디 (0) | 2023.08.06 |
---|---|
LinkedList,Stack,Queue 구현 및 테스트 - 백기선 자바라이브스터디 (0) | 2023.08.06 |
JUnit5을 이용한 테스트코드 작성 방법 - 1편 (0) | 2023.08.05 |
연산자 - 백기선 자바라이브스터디 (0) | 2023.07.28 |
자바 데이터 타입, 변수 그리고 배열 - 백기선 자바라이브스터디 (0) | 2023.07.22 |