[java] JUnitParams에서의 테스트 더블(Mock, Stub) 사용 방법은 어떻게 되나요?

JUnitParams는 JUnit을 보완하여 매개변수화된 테스트 케이스를 작성할 수 있도록 도와주는 라이브러리입니다. 이 라이브러리를 사용하여 테스트 더블(Mock, Stub)을 사용하는 방법에 대해 알아보겠습니다.

  1. Mock 객체 만들기 Mock 객체는 실제 객체의 동작을 흉내내는 가짜 객체입니다. Mock 객체를 만들기 위해서는 일반적으로 Mockito 라이브러리를 사용합니다. 다음은 Mockito를 사용하여 Mock 객체를 만드는 예시입니다.

    import static org.mockito.Mockito.*;
    
    // ...
    
    SomeClass mockObject = mock(SomeClass.class);
    
  2. Stub 설정하기 Stub은 Mock 객체의 특정 메서드를 호출했을 때 반환되는 값을 지정하는 것을 말합니다. Mockito를 사용하여 Stub을 설정하는 방법은 다음과 같습니다.

    // Mock 객체의 메서드를 Stub 설정
    when(mockObject.someMethod()).thenReturn("mocked value");
    

    위의 예시에서는 mockObjectsomeMethod()가 호출될 때 “mocked value”를 반환하도록 Stub 설정을 하였습니다.

  3. 테스트 코드 작성하기 JUnitParams를 사용하여 매개변수화된 테스트 메서드를 작성할 수 있습니다. Mock 객체와 Stub 설정을 이용하여 테스트 코드를 작성하는 예시는 다음과 같습니다.

    import org.junit.*;
    import org.junit.runner.RunWith;
    import junitparams.*;
    import static org.junit.Assert.*;
    import static org.mockito.Mockito.*;
    
    // ...
    
    @RunWith(JUnitParamsRunner.class)
    public class MyTestClass {
    
        @Test
        @Parameters({"1", "2", "3"})
        public void myTestMethod(int param){
            // Mock 객체 생성
            SomeClass mockObject = mock(SomeClass.class);
            // Stub 설정
            when(mockObject.someMethod()).thenReturn("mocked value");
    
            // 테스트 로직 수행
            String result = mockObject.someMethod();
    
            // 결과 검증
            assertEquals("mocked value", result);
            verify(mockObject).someMethod();
        }
    
    }
    

    위의 예시에서는 myTestMethod()라는 매개변수화된 테스트 메서드를 작성하였습니다. mockObject를 생성하고 someMethod()의 Stub을 설정하여 테스트 로직을 수행하고, 결과를 검증하는 과정을 포함하고 있습니다.

이와 같이 JUnitParams와 Mockito를 함께 사용하여 테스트 더블을 활용할 수 있습니다. JUnitParams의 테스트 케이스 작성 기능과 Mockito의 Mock 및 Stub 기능을 조합하여 효율적인 테스트 코드를 작성할 수 있습니다.

참고 자료: