0
我只是在與Moq玩耍,我無法弄清楚如何撥打Verify
來按預期工作。我的問題似乎是我在SUT上調用的方法沒有被調用。這裏是我的代碼進行測試:初學者Moq關於驗證的問題
public class ImageHandler : BaseHttpHandler
{
public override void ProcessRequest(HttpContextBase context)
{
var person = new Person();
this.DoPerson(person);
context.Response.ContentType = "image/jpeg";
if (context.Request.RawUrl.ToLower().Contains("jellyfish.jpg"))
{
context.Response.TransmitFile(@"C:\Temp\jf.jpg");
}
else if (context.Request.RawUrl.ToLower().Contains("koala.jpg"))
{
context.Response.TransmitFile(@"C:\Temp\k.jpg");
}
else
{
context.Response.Write("File not found.");
}
}
public virtual void DoPerson(Person person)
{
}
}
這裏是我的MSpec測試:
[Subject("Process")]
public class When_Given_Person
{
private static Mock<HttpContextBase> httpContext;
private static Mock<HttpRequestBase> httpRequest;
private static Mock<HttpResponseBase> httpResponse;
private static Mock<ImageHandler> mockSut;
private static BaseHttpHandler sut;
private Establish context =() =>
{
httpContext = new Mock<HttpContextBase>();
httpResponse = new Mock<HttpResponseBase>();
httpRequest = new Mock<HttpRequestBase>();
mockSut = new Mock<ImageHandler>();
httpContext.SetupGet(context => context.Response).Returns(httpResponse.Object);
httpContext.SetupGet(context => context.Request).Returns(httpRequest.Object);
httpRequest.SetupGet(r => r.RawUrl).Returns("http://logicsoftware/unkown.jpg");
sut = mockSut.Object;
};
private Because of =() => sut.ProcessRequest(httpContext.Object);
private It should_call_person_with_expected_age =() =>
{
mockSut.Verify(s => s.DoPerson(Moq.It.IsAny<Person>()),Times.AtLeastOnce());
};
}
這是很基本的東西,沒有什麼太花哨。現在,當我運行測試,我得到:
上模擬預期調用至少一次,但從來沒有 執行:S => s.DoPerson(It.IsAny())沒有配置設置。
我相信這是由於這樣的事實:sut.ProcessRequest()
實際上不叫 - 我有一個斷點的ProcessRequest()的開始,但它從來沒有擊中。有人可以告訴我如何設置我的mockSut,以便調用ProcessRequest()
。
乾杯。 Jas。
我在RhinoMocks上試了這個相同的場景,並且運行得相當快。不是說Moq是廢話,但我覺得它設置和運行有點煩瑣。我通常使用TypeMock,但由於工作的變化,我需要開始使用開源的模擬框架。 –