단위 테스트에서 SUT(테스트 대상 객체)를 선언할 때, 주입받는 의존성 객체들을 어떻게 설정할지에 대한 접근 방법은 다음과 같습니다:
Mock 객체를 사용하여 모든 의존성을 대체:
@InjectMocks
를 통해 SUT 객체에 주입합니다.@Mock
private Dependency1 mockDependency1;
@Mock
private Dependency2 mockDependency2;
@Mock
private Dependency3 mockDependency3;
@Mock
private Dependency4 mockDependency4;
@Mock
private Dependency5 mockDependency5;
@InjectMocks
private SUT sut; // System Under Test
장점:
단점:
실제 객체와 Mock 객체 혼합:
@Spy
를 사용하여 부분적으로 실제 객체의 동작을 유지하면서 특정 메서드만 Mock으로 설정할 수도 있습니다.@Mock
private Dependency1 mockDependency1;
@Mock
private Dependency2 mockDependency2;
@Spy
private Dependency3 realDependency3 = new RealDependency3(); // 실제 객체 사용
@Mock
private Dependency4 mockDependency4;
@Mock
private Dependency5 mockDependency5;
@InjectMocks
private SUT sut; // System Under Test
장점:
단점:
@InjectMocks
를 사용하여 SUT 객체를 생성할 때, Mock 객체가 필요한 동작을 반환하도록 스터빙을 설정합니다.when(mockObject.someMethod()).thenReturn(someValue);
와 같은 스터빙 설정을 통해 Mock 객체의 동작을 제어합니다.일반적으로 단위 테스트에서는 모든 의존성을 Mock으로 설정하여 SUT 객체의 동작을 완벽하게 제어하고, 테스트의 정확성과 독립성을 보장하는 것이 좋습니다. 하지만 실제 의존성의 동작이 중요한 경우, 혼합 방식으로 실제 객체와 Mock 객체를 함께 사용할 수 있습니다.