모의/스텁/가짜/테스트 더블/등. 단위 테스트에서는 문제가 없으며 테스트중인 클래스/시스템을 개별적으로 테스트 할 수 있습니다. 통합 테스트는 모의 (mocks)를 사용하지 않을 수도 있습니다. 그들은 실제로 데이터베이스 또는 다른 외부 의존성에 부딪쳤다.
해야 할 때 mock이나 스텁을 사용합니다. 일반적으로 테스트하려는 클래스가 인터페이스에 종속되어 있기 때문입니다. TDD의 경우 구현이 아닌 인터페이스를 프로그래밍하고 종속성 삽입 (일반적으로 말하면)을 사용합니다.
아주 간단한 경우 :
public class ClassToTest
{
public ClassToTest(IDependency dependency)
{
_dependency = dependency;
}
public bool MethodToTest()
{
return _dependency.DoSomething();
}
}
IDependency는 인터페이스, 고가의 호출 (데이터베이스 액세스, 웹 서비스 호출 등) 가능성이다. 테스트 방법은 유사한 코드가 포함될 수 있습니다 : 나는 (@Finglas가 제안) 상태 테스트를하고 있어요
// Arrange
var mock = new Mock<IDependency>();
mock.Setup(x => x.DoSomething()).Returns(true);
var systemUnderTest = new ClassToTest(mock.Object);
// Act
bool result = systemUnderTest.MethodToTest();
// Assert
Assert.That(result, Is.True);
참고, 나는 단지 (테스트중인 시스템에 대해 내가 '클래스의 인스턴스를 주장하고있어 m 테스트). 이 경우와 같이 속성 값 (상태) 또는 메서드 반환 값을 확인할 수 있습니다.
특히 .NET을 사용하는 경우 The Art of Unit Testing을 읽는 것이 좋습니다.
마지막 점은 http://martinfowler.com/articles/mocksArentStubs.html에서 귀하가 그 차이점을 알고 계신지 확인하십시오. – Finglas
그 중 몇 가지 질문을 다루기에 좋은 읽을 거리 : http://xunitpatterns.com/TestStrategy.html –