TestCode
Junit4 와 Junit5의 아주 간략한 차이
challnum
2024. 4. 20. 22:15
TestCode를 이용해서 동시성 문제를 사용해보려다 생긴 모두가 알법한 아주 간단한 이슈를 정리합니다.
기존의 Junit4에서의 TestCode는 아래와 같은 식으로 작성을 했었다. 내용을 보면 @RunWith, @After 어노테이션을 사용하고 있다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class PostsRepositoryTest {
@Autowired
PostsRepository postsRepository;
@After
public void cleanup() {
postsRepository.deleteAll();
}
@Test
public void 게시글저장_불러오기() {
//given
String title = "테스트 게시글";
String content = "테스트 본문";
postsRepository.save(Posts.builder()
.title(title)
.content(content)
.author("jojoldu@gmail.com")
.build());
//when
List<Posts> postsList = postsRepository.findAll();
//then
Posts posts = postsList.get(0);
assertThat(posts.getTitle()).isEqualTo(title);
assertThat(posts.getContent()).isEqualTo(content);
}
하지만 나는 새롭게 테스트 하는 내용의 경우 아래와 같이 @BeforeEach, @AfterEach 어노테이션과 assertEquals를 사용하려고 했었다.
@SpringBootTest
public class StockServiceTest {
@Autowired
private StockService stockService;
@Autowired
private StockRepository stockRepository;
@BeforeEach
public void before(){
stockRepository.saveAndFlush(new Stock(1L, 100L));
}
@AfterEach
public void after(){
stockRepository.deleteAll();
}
@Test
public void 재고감소(){
stockService.decrease(1L, 1L);
Stock stock = stockRepository.findById(1L).orElseThrow();
assertEquals(99, stock.getQuantity());
}
}
하지만 그 과정에서
아래와 같은 NullPointExection이 발생했습니다. 그 말은 테스트 하기 전에 @AfterEach 어노테이션으로 값을 넣어주었는데 이 부분이 생략되었다는 말이며 기존의 Junit4에 맞게 작성된 코드는 잘 동작했으니 이 부분은 버전의 문제라고 볼 수 있습니다.
java.lang.NullPointerException at com.shop.mikor.service.StockServiceTest.재고감소(StockServiceTest.java:32)
그렇기에 Junit4 와 Junit5의 지원하는 기능의 차이를 보게 되면 아래와 같이 변경된 것을 알 수 있습니다.