[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);
}
위 예시에서는 MyClass
의 DoSomething
메서드를 테스트하는 경우 모의 객체를 사용하여 IDependency
에 대한 의존성을 제거하고, 해당 메서드가 올바르게 동작하는지를 확인합니다.
C#에서 모의 객체를 사용하면 테스트 코드를 더욱 격리시키고 의존성을 관리하기 쉽게 만들 수 있습니다. 여러분의 프로젝트에 맞는 모의 객체 라이브러리를 선택하여 사용해보세요.
참고문헌:
- Moq 공식 문서: https://github.com/moq/moq4
- MSDN Magazine - 소프트웨어 테스트 깨끗이 유지하기: https://docs.microsoft.com/ko-kr/archive/msdn-magazine/2008/july/clean-up-your-mess-using-mocks