私は Moq をいじっているだけでVerify
、期待どおりに動作するように呼び出す方法がわかりません。私の問題は、SUT で呼び出しているメソッドが呼び出されていないことです。テストするコードは次のとおりです。
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());
};
}
これは本当に基本的なもので、派手すぎません。さて、テストを実行すると、次のようになります。
モックでの呼び出しが少なくとも 1 回期待されていましたが、実行されませんでした: s => s.DoPerson(It.IsAny()) セットアップが構成されていません。
これはsut.ProcessRequest()
実際には呼び出されていないためだと思います.ProcessRequest()の開始時にブレークポイントがありますが、ヒットすることはありません. ProcessRequest()
誰かが呼び出されるように私のmockSutをセットアップする方法を教えてもらえますか?
乾杯。ジャス。