나는 그 중 하나의 모델에서 작동 비즈니스 로직 프로세스의 일련의 수행 클래스있다 : 가정비웃음 방법
public virtual void TryToRunProcess(Model model)
{
var result = RunCheckMethodOne(model) && RunCheckMethodTwo(model);
if (result)
RunMethodThree(model);
}
internal virtual bool RunCheckMethodOne(Model model)
{
...
}
internal virtual bool RunCheckMethodTwo(Model model)
{
...
}
internal virtual void RunMethodThree(Model model)
{
...
}
를 그 모델과 관련 RunCheckMethodOne()와 RunCheckMethodTwo() 메서드는 자체 단위 테스트 집합을 보증하기에 충분히 복잡하므로 RunCheckMethodOne() 및 RunCheckMethodTwo()에서 적절한 응답을 받으면 RunMethodThree()가 올바르게 실행되는지 테스트하고 싶습니다.
비즈니스 로직 클래스를 조롱하고 특정 결과를 반환하는 두 가지 확인 방법을 설정 한 다음 세 번째 방법이 실행되는지 확인하여이 작업을 수행하고 싶습니다. 내 단위 테스트의
하나는 :
[TestMethod]
public void TryToRunProcessBothCheckMethodsAreTrueShouldExecuteMethodThreeTest()
{
var model = new Model();
var mock = new Mock<ModelBusinessLogic>();
mock.Setup(r => r.RunCheckMethodOne(It.IsAny<Model>())).Returns(true);
mock.Setup(r => r.RunCheckMethodTwo(It.IsAny<Model>())).Returns(true);
mock.Setup(r => r.RunMethodThree(It.IsAny<Model>())).Verifiable();
mock.Object.TryToRunProcess(model);
mock.Verify(r => r.RunMethodThree(It.IsAny<Model>()), Times.Once());
}
지금, 그것은 작동해야처럼이 나는이 단위 테스트 RunCheckMethodOne()와 RunCheckMethodTwo() 메서드는 다음과 같이 조롱되지 않는 실행 그러나 때 보이는 날에 나는 기대할 것이다. 모의 객체에 설정된 값을 반환하기보다는 실제로 ModelBusinessLogic 클래스 내에서 실행됩니다.
비즈니스 로직 내에서 메소드를 조롱 할 수 있도록 동일한 비즈니스 로직 메소드를 동일한 클래스에 유지할 수 있도록 구현시 무엇을해야합니까? 다른 방법으로 특정 시나리오를 연습하는 수업?
.Net Framework 4.5 및 Moq 4.0.0.0을 사용하고 있습니다.
mock.Callbase = true가 도움이 되나요? –
나는 그 깃발을 또한 사용하는 것을 시도하고 저것은 돕는 것을 보이지 않는다. Moq에 대한 Intellisense 도움말에 따르면 CallBase 속성은 설치 프로그램이 없을 때 기본 가상 구현으로 기본 설정됩니다. ModelBusinessLogic의 기본 구현보다는 명시 적으로 사용하려는 설정이 이미 있으므로 도움이 될 것 같습니다. –