2017-12-27 41 views
0

두 주석은 현재 테스트 클래스의 각 Test 메소드 이전에 주석 메소드가 실행되어야 함을 알리는 데 사용됩니다.BeforeClass (Junit 4)와 BeforeEach (Junit5)의 차이점

왜 주석을 변경 했습니까? @BeforeClass - Junit 4 To @BeforeEach Junit 5?

junit 5에 추가 된 사항이 있습니까?

다른 주석의 경우는 마찬가지입니다.

+1

아니요, 그게 BeforeClass가있는 것이 아닙니다. javadoc을 읽습니다. 그러나 이름이 바뀌었다. ... 그들은 새로운 이름이 더 나을 것이라고 생각했기 때문이다. 새롭고 호환되지 않는 버전이기 때문에 이름을 변경하지 않으시겠습니까? –

+4

'@ Before'는'@ BeforeEach'로 이름이 바뀌 었습니다 (그리고'@ BeforeClass'는'@ BeforeAll'로 이름이 변경되었습니다). 이미 언급했듯이, "각 테스트 방법 전에 실행됩니다." 그래서 이것은 좋은 새로운 이름입니다. –

+0

확인해 주셔서 감사합니다. BeforeClass는 클래스의 테스트 메소드보다 한 번 실행되기 때문에 둘 다 동일합니다. 그들이 이름을 변경 한 것입니다. 새로운 주석에 추가 사항을 추가했는지 알고 싶었습니다. – Niraj

답변

1

추가 기능의 주요 기능은 Test Instance Lifecycle을 통해보다 세분화 된 컨트롤입니다 (예 : @TestInstance 주석). 나는 이것이 이전의 @Before@BeforeClass 주석의 이름을 변경하는 이유 중 하나라고 추정합니다.

오래된 (JUnit4) @Before 새로운 (JUnit5) @BeforeEach가 그것들이 실행 비슷 새롭게 전에 테스트 클래스의 모든@Test 방법. 따라서 클래스에 10 개의 테스트 메소드가 있다면 @BeforeEach 메소드가 10 번 실행됩니다.

는 오래된 (JUnit4) @BeforeClass 새로운 (JUnit5) @BeforeAll는 점에서 유사하다 그들은 모두 클래스의 테스트의 전에, 단지 실행됩니다. 따라서 클래스에 10 개의 테스트가 있더라도 @BeforeAll 메서드는 한 번만 실행됩니다.

@BeforeClass@BeforeEach로 이름이 변경되었다 질문에 만든 제안 따라서 잘못된입니다.

자세한 내용은 @Before, @BeforeClass, @BeforeEach 및 @BeforeAll의 차이점에 대해서도 this question을 참조하십시오.

2

테스트 클래스에 @TestInstance(Lifecycle.PER_CLASS)으로 먼저 주석을 첨부해야하는 몇 가지 변경 사항이 있습니다. 이렇게하면 메서드 당 대신 테스트 클래스 당 한 번씩 새 테스트 인스턴스가 만들어집니다.

결과적으로 인터페이스 기본값 방법뿐만 아니라 비 정적 방법에도 @BeforeAll@AfterAll을 사용할 수 있습니다. 또한 및 @AfterAll@Nested 테스트 클래스에 사용할 수 있습니다.

Lifecycle.PER_CLASS을 사용하는 경우 테스트에서 인스턴스 변수에 저장된 상태에 의존하는 경우 해당 상태를 @BeforeEach@AfterEach으로 다시 설정해야 할 수 있음을 기억해야합니다.