본문 바로가기

JUnit (Test)

(6)
@TestMethodOrder 이 어노테이션은 뭘까. 테스트 클래스에 테스트 메서드를 쭉 나열했다고 치자. 이 테스트 메서드들은 위에서 아래로 실행될까? 그건 보장할 수 없다. 테스트를 실행해야하는 순서를 보장해야할 때, 이 어노테이션을 쓰면 된다. 아래 예시를 보자. @TestInstance(TestInstance.Lifecycle.PER_METHOD) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class CarTest { private int number = 0; @Order(3) @Test void test1() { System.out.println(1); } @Order(2) @Test void test2() { System.out.println(2); } @Order(1)..
JUnit 의 @TestInstance 다음 테스트 코드가 있다. class CarTest { private int number = 0; @Test void test1() { System.out.println(++number); } @Test void test2() { System.out.println(++number); } } 이 클래스 테스트들을 돌리면 결과가 어떻게 나올까. 1과 2? 나도 처음엔 그렇게 생각했다. 하지만 정답은 1과 1이다. 왜냐하면, JUnit 에서는 @Test 가 붙은 테스트 메서드를 실행시킬 때, 각각 클래스를 새로 로딩(?) 한다. 그럼 처음 생각했던 대로 1, 2가 나오게 하려면 어떻게 해야 할까. @TestInstance 어노테이션을 사용하면 된다. 이 어노테이션에는 인수를 설정할 수 있는데, @TestIns..
JUnit 5 새로 배운 것 정말 소소하다. JUnit 4 와 JUnit 5 의 문법을 혼용하지 말자. 재대로 배우고 사용하자. 예를 들면 테스트 메서드에 public 을 안써도 된다.
JUnit5 이 무엇입니까? JUnit JUnit4 로 작성된 테스트코드가 5에서 안돌아가면 이상할 것이다. 그래서 vintage-engine 을 만들어 JUnit4 로 작성한 코드를 돌릴 수 있다. jupiter-api : JUnit5 로 작성할 수 있는 테스트들의 API 가 들어 있다. jupiter-engine : jupiter 기반으로 작성된 테스트 케이스를 JUnit Platform 에서 실행시키기 위한 테스트 엔진 JUnit Platform : JVM 테스팅 프레임워크를 실행시키기 위한 기반 모듈. 테스트를 발견하고 테스트 계획을 생성하는 인터페이스를 정의하고 있다. 그 구현체가 engine 들 이다. 의존설정 자세한 의존설정 방법은 인터넷에 많이 나와 있으니 생략 모듈들을 불러오기 위해 의존설정을 해줘야 한다. Spri..
Exception 테스트하기 지금까지 TDD_byExample 책을 읽으면서 값에 대한 비교 테스트만 접해봤지 예외상황이 잘 나오나 테스트를 해본적은 없었다. 예외를 메세지와 함께 테스트 하는 방법을 기록한다. Exception exception = Assertions.assertThrows(발생할 예외.class, () -> { 예외가 발생할 상황(메소드) }); Assertions.assertEquals(예외가 발생하면 출력되도록 예상하는 메서드, exception.getMessage());
private 메소드 테스트 private로 선언한 메소드를 테스트하고 싶었는데, private로 선언된 메소드는 외부에서 접근이 불가능하므로 테스트를 할 수 없었다. 그래서 임시로 public으로 바꾸고 테스트를 진행하였다. 하지만 나중에 프로젝트의 크기가 커지면. 테스트의 규모가 커지면. 그 과정에서 내가 public으로 바꾼 것을 다시 private으로 바꾸는 것을 잊으면? 이런 이슈에 대해 알아보았다. 1. 많은 경우 private 메소드는 public 메소드 안에 존재한다. 공용 메소드만을 외부로 노출시킨다는 원칙을 따른다면, private 메소드는 밖에서 쓰이는 것이 아니라 안에서 쓰이는 것이기 때문. 따라서 우린 public 메소드를 통해 간접적으로 테스트 할 수 있다. 이 방법이 제일 자연스럽다. 2. 하지만 priv..