[java] TestNG에서 모의 객체(Mock object)를 활용한 테스트

TestNG는 자바 기반의 테스팅 프레임워크로, 모의 객체(Mock object)를 활용하여 테스트를 수행할 수 있습니다. 모의 객체는 실제 객체의 동작을 모방하며, 테스트 중에 사용할 수 있는 가짜 객체입니다. 이를 통해 의존성을 가진 객체를 테스트하는 데 도움이 됩니다.

Mockito를 사용한 모의 객체 생성

Mockito는 자바에서 모의 객체를 생성하기 위해 널리 사용되는 라이브러리입니다. 다음은 Mockito를 사용하여 모의 객체를 생성하는 방법입니다.

// 모의 객체 생성
List<String> mockList = Mockito.mock(List.class);

위의 코드에서는 List 인터페이스의 모의 객체를 생성하고 있습니다. 이제 mockList 객체를 통해 List에 정의된 메서드를 호출할 수 있습니다.

모의 객체의 동작 정의하기

모의 객체는 테스트 중에 원하는 방식으로 동작하도록 정의할 수 있습니다. 예를 들어, 모의 객체의 메서드 호출 시 반환값을 설정하거나 원하는 예외를 발생시킬 수 있습니다. 다음은 모의 객체의 동작을 정의하는 예제입니다.

// 메서드 호출 시 반환값 설정
Mockito.when(mockList.size()).thenReturn(10);

// 예외 발생시키기
Mockito.when(mockList.get(Mockito.anyInt())).thenThrow(new IndexOutOfBoundsException());

// 모의 객체 동작 검증
Mockito.verify(mockList).size();

위의 코드에서는 size() 메서드가 호출될 때 10을 반환하도록 설정하고 있습니다. 또한 get() 메서드 호출 시 IndexOutOfBoundsException을 발생시키도록 정의하였습니다. 마지막으로 verify() 메서드를 사용하여 size() 메서드가 호출되었는지 검증하고 있습니다.

테스트 메서드에서 모의 객체 사용하기

이제 모의 객체를 사용하여 TestNG 테스트 메서드를 작성해 보겠습니다. 다음은 모의 객체를 활용한 테스트 코드의 예시입니다.

import org.testng.Assert;
import org.testng.annotations.Test;
import org.mockito.Mockito;

public class MyTest {

    @Test
    public void testMockObject() {
        // 모의 객체 생성
        List<String> mockList = Mockito.mock(List.class);
        
        // 모의 객체 동작 정의
        Mockito.when(mockList.size()).thenReturn(10);
        
        // 모의 객체 사용
        Assert.assertEquals(mockList.size(), 10);
    }
}

위의 코드에서는 @Test 어노테이션을 사용하여 TestNG 테스트 메서드를 정의하고 있습니다. 테스트 메서드에서는 모의 객체를 생성하고 원하는 동작을 정의한 후, 테스트 결과를 검증하고 있습니다.

이제 TestNG에서 모의 객체를 활용한 테스트를 수행할 준비가 되었습니다. 모의 객체를 사용하여 테스트를 작성하면 의존성을 가진 객체를 테스트하는 데 훨씬 쉽고 유연하게 접근할 수 있습니다.

참고: