반응형
단위 테스트를 진행할 때, 우리는 객체를 직접 생성해야만 그 객체가 가지고 있는 함수들을 테스트해볼 수 있다.
간단한 객체라면 테스트 코드 내부에서 대충 생성해주면 되지만, 간혹 객체가 복잡해질 경우에는 쉽게 객체를 만들 수 없다.
이 때 사용하는 것이 Mock이다. Mock이란 실제로 DB에 연결하지 않고, 객체 그 모양만 그대로 가져와서 가짜 객체를 만들어준다. 그 중에서도 내가 필요로 하는 메서드만 가지고 올 수 있어서, 객체에 대한 단위 테스트를 굉장히 용이하게 할 수 있다.
예를 들면, 스프링 프로젝트에서 @Autowired로 다른 의존성을 주입받아 사용하는 객체를 테스트한다고 가정하자.
그 객체는 뭐 테스트 코드에서 대충 만들 수 있다 쳐도, 내부에 있는 의존성까지 테스트 코드에서 작성해야 한다는 말인가?
가능은 하겠지만, 매우 복잡해지고 책임이 커질 것이다. 이 때 Mock을 사용할 수 있다.
public class Inventory {
@Autowired
private List<Product> products;
...
}
이런 Inventory 객체를 Mock을 사용해서 테스트하고 싶다면, 아래와 같이 하면 된다.
@RunWIth(MockitoJUnitRunner.class)
public class InventoryTest {
@InjectMocks // Mock을 주입 받을 클래스 (테스트할 클래스)
private Inventory inventory;
@Mock // Mock 객체를 통해 가짜로 생성되어야 할 클래스
private List<Product> products;
@Test
public void testInventory() {
inventory.testMethod();
}
}
그러나 Mock을 사용하는 경우에는 테스트 코드가 복잡해지므로, 처음부터 최대한 Mock이 필요하지 않게 프로그래밍하는 게 중요하다...
'간단 정리 > Java' 카테고리의 다른 글
[간단 정리] DTO란? (0) | 2024.11.10 |
---|---|
[간단 정리] SOLID 원칙 (3) | 2024.11.08 |
[간단 정리] Java ArrayList vs LinkedList (1) | 2024.09.08 |