[c#] C# 유닛 테스트에서 모의 객체

C#에서 유닛 테스트를 작성할 때 종종 모의 객체(mock object)를 사용하는 경우가 있습니다. 모의 객체를 사용하면 특정 객체의 동작을 테스트하는 동안 실제 의존성을 제거할 수 있습니다. 이번 포스트에서는 C#에서 모의 객체를 어떻게 생성하고 사용하는지에 대해 알아보겠습니다.

모의 객체란 무엇인가요?

모의 객체는 실제 객체를 대체하는 가짜 객체입니다. 이를 사용하면 특정 동작을 테스트하는 동안 실제 객체에 대한 의존성을 제거할 수 있습니다. 이를 통해 테스트 코드를 더욱 격리시키고 테스트하기 쉽게 만들 수 있습니다.

모의 객체를 생성하는 방법

C#에서는 모의 객체를 만들기 위해 Moq, Rhino Mocks, NSubstitute 등의 라이브러리를 사용할 수 있습니다. 이 중에서 Moq를 사용하는 방법을 살펴보겠습니다.

using Moq;

// 모의 객체 생성
var mockObject = new Mock<인터페이스나클래스>();

// 모의 객체에 동작 정의
mockObject.Setup(x => x.MethodToMock()).Returns(expectedResult);

위 예제에서는 Moq를 사용하여 모의 객체를 생성하고, 모의 객체에 특정 메서드의 동작을 정의하는 방법을 보여줍니다.

모의 객체를 사용하는 예시

아래는 모의 객체를 사용하여 유닛 테스트를 작성하는 간단한 예시입니다.

public interface IDependency
{
    string GetData();
}

public class MyClass
{
    private IDependency _dependency;

    public MyClass(IDependency dependency)
    {
        _dependency = dependency;
    }

    public string DoSomething()
    {
        return _dependency.GetData();
    }
}

[Test]
public void MyClass_DoSomething_CallsDependency()
{
    // 모의 객체 생성
    var mockDependency = new Mock<IDependency>();
    mockDependency.Setup(x => x.GetData()).Returns("mocked data");

    // MyClass에 모의 객체 주입
    var myClass = new MyClass(mockDependency.Object);

    // 특정 메서드 호출
    string result = myClass.DoSomething();

    // 검증
    mockDependency.Verify(x => x.GetData(), Times.Once);
}

위 예시에서는 MyClassDoSomething 메서드를 테스트하는 경우 모의 객체를 사용하여 IDependency에 대한 의존성을 제거하고, 해당 메서드가 올바르게 동작하는지를 확인합니다.

C#에서 모의 객체를 사용하면 테스트 코드를 더욱 격리시키고 의존성을 관리하기 쉽게 만들 수 있습니다. 여러분의 프로젝트에 맞는 모의 객체 라이브러리를 선택하여 사용해보세요.

참고문헌: