1. 소개
이 짧은 예제에서, 우리는 차이점을 설명하는거야 @Before , @BeforeClass , @BeforeEach 및 @BeforeAll 을 사용하는 방법에 대한 실제 예제와 함께 -의 JUnit 4와 5에 어노테이션을.
또한 @After 보완 어노테이션에 대해서도 간략히 설명합니다.
JUnit 4부터 시작하겠습니다.
2. @ 전
@Before 어노테이션이 있는 메소드 는 각 테스트 전에 실행됩니다. 이것은 테스트를 실행하기 전에 일반적인 코드를 실행하고자 할 때 유용합니다.
List을 초기화하고 값을 추가하는 예를 살펴 보겠습니다.
@RunWith(JUnit4.class)
public class BeforeAndAfterAnnotationsUnitTest {
// ...
private List<String> list;
@Before
public void init() {
LOG.info("startup");
list = new ArrayList<>(Arrays.asList("test1", "test2"));
}
@After
public void teardown() {
LOG.info("teardown");
list.clear();
}
}
또한 각 테스트를 실행 한 후 List을 지우기 위해 @After 어노테이션이 달린 또 다른 메서드를 추가했습니다 .
그 후 List의 크기를 확인하기 위해 몇 가지 테스트를 추가해 보겠습니다.
@Test
public void whenCheckingListSize_thenSizeEqualsToInit() {
LOG.info("executing test");
assertEquals(2, list.size());
list.add("another test");
}
@Test
public void whenCheckingListSizeAgain_thenSizeEqualsToInit() {
LOG.info("executing another test");
assertEquals(2, list.size());
list.add("yet another test");
}
이 경우 테스트 실행 시마다 List이 수정되므로 각 테스트를 실행하기 전에 테스트 환경이 제대로 설정되었는지 확인하는 것이 중요합니다 .
로그 출력을 살펴보면 init 및 teardown 메서드가 테스트 당 한 번씩 실행 되었는지 확인할 수 있습니다 .
... startup
... executing another test
... teardown
... startup
... executing test
... teardown
3. @BeforeClass
각 테스트 전에 비용이 많이 드는 일반적인 작업 을 실행하려면 @BeforeClass를 사용하여 모든 테스트를 실행하기 전에 한 번만 실행하는 것이 좋습니다 . 일반적으로 비용이 많이 드는 작업의 몇 가지 예는 데이터베이스 연결 생성 또는 서버 시작입니다.
데이터베이스 연결 생성을 시뮬레이션하는 간단한 테스트 클래스를 만들어 보겠습니다.
@RunWith(JUnit4.class)
public class BeforeClassAndAfterClassAnnotationsUnitTest {
// ...
@BeforeClass
public static void setup() {
LOG.info("startup - creating DB connection");
}
@AfterClass
public static void tearDown() {
LOG.info("closing DB connection");
}
}
통지 이러한 방법이 정적 일하기 가 클래스의 테스트를 실행하기 전에 실행됩니다, 그래서.
이전에했던 것처럼 간단한 테스트도 추가해 보겠습니다.
@Test
public void simpleTest() {
LOG.info("simple test");
}
@Test
public void anotherSimpleTest() {
LOG.info("another simple test");
}
이번에는 로그 출력을 살펴보면 setup 및 tearDown 메서드가 한 번만 실행 되었는지 확인할 수 있습니다 .
... startup - creating DB connection
... simple test
... another simple test
... closing DB connection
4. @BeforeEach 및 @BeforeAll
@BeforeEac의 H 및 @BeforeAll는 의 JUnit을 5 당량이다 @Before 와 @BeforeClass . 이러한 어노테이션은 혼동을 피하기 위해 더 명확한 이름으로 이름이 변경되었습니다.
@BeforeEach 및 @AfterEach 어노테이션으로 시작하여 이러한 새 어노테이션을 사용하여 이전 클래스를 복제 해 보겠습니다 .
@RunWith(JUnitPlatform.class)
class BeforeEachAndAfterEachAnnotationsUnitTest {
// ...
private List<String> list;
@BeforeEach
void init() {
LOG.info("startup");
list = new ArrayList<>(Arrays.asList("test1", "test2"));
}
@AfterEach
void teardown() {
LOG.info("teardown");
list.clear();
}
// ...
}
우리가 로그를 확인하면, 우리는이와 같은 방식으로 작동하는지 확인할 수 있습니다 @Before 와 @After 어노테이션 :
... startup
... executing another test
... teardown
... startup
... executing test
... teardown
마지막으로 @BeforeAll 및 @AfterAll 어노테이션이 작동 하는지 확인하기 위해 다른 테스트 클래스에 대해서도 동일하게 수행해 보겠습니다 .
@RunWith(JUnitPlatform.class)
public class BeforeAllAndAfterAllAnnotationsUnitTest {
// ...
@BeforeAll
public static void setup() {
LOG.info("startup - creating DB connection");
}
@AfterAll
public static void tearDown() {
LOG.info("closing DB connection");
}
// ...
}
출력은 이전 어노테이션과 동일합니다.
... startup - creating DB connection
... simple test
... another simple test
... closing DB connection
5. 결론
이 문서에서는, 우리는 사이의 차이를 보여 주었다 @Before , @BeforeClass , @BeforeEach 및 @BeforeAll 어노테이션의 JUnit에서 때 그들 각각이 사용되어야한다.
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/junit-before-beforeclass-beforeeach-beforeall
'Java' 카테고리의 다른 글
Spring MVC와 @ModelAttribute 어노테이션 (0) | 2021.04.19 |
---|---|
Spring MVC의 HttpMediaTypeNotAcceptableException (0) | 2021.04.18 |
Spring MVC의 HandlerAdapters (0) | 2021.04.18 |
Spring 용 템플릿 엔진 (0) | 2021.04.18 |
Spring 5 및 Servlet 4 – PushBuilder (0) | 2021.04.18 |