간단 정리/Java

[간단 정리] Mock 객체란?

kim-dev 2024. 11. 9. 15:19
반응형

단위 테스트를 진행할 때, 우리는 객체를 직접 생성해야만 그 객체가 가지고 있는 함수들을 테스트해볼 수 있다.

간단한 객체라면 테스트 코드 내부에서 대충 생성해주면 되지만, 간혹 객체가 복잡해질 경우에는 쉽게 객체를 만들 수 없다.

 

이 때 사용하는 것이 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이 필요하지 않게 프로그래밍하는 게 중요하다...