0
.ashxでメソッドをテストしようとしています。 (はい、ASP.NET Webフォームサイト。)虚偽のHttpContextBaseでリターンセッションとリクエストのparam値を設定するにはどうすればよいですか?
private Mock<HttpContextBase> moqContext;
private Mock<HttpRequestBase> moqRequest;
private Mock<HttpSessionStateBase> moqSession;
[Test]
public void ShouldDownloadFile()
{
moqContext = new Mock<HttpContextBase>();
moqRequest = new Mock<HttpRequestBase>();
moqSession = new Mock<HttpSessionStateBase>();
moqRequest.Setup(x => x.Params["PrintId"]).Returns("1981");
moqSession.Setup(x => x["VoucherId"]).Returns("164282");
moqContext.Setup(x => x.Request).Returns(moqRequest.Object);
moqContext.SetupGet(x => x.Session).Returns(moqSession.Object);
var handler = new VoucherPrintServices();
handler.DownloadReport(moqContext.Object);
}
テストが言って
moqRequest.Setup(x => x.Params["PrintId"]).Returns("1981");
で失敗した、非仮想(VBでオーバーライド)メンバーに
無効なセットアップ:x => x.Params ["PrintId"]
しかし、次に模擬する正しい方法はHttpContext
ですセッションとリクエストパラメータの値は?
メッセージには、アクセサーは仮想ではないため、テストのためにオーバーライド/モックすることはできません。しかし、Paramsプロパティは仮想です。つまり、そのキーを含む実際のNameValueCollectionに置き換えることができます。 – Nkosi
テスト中のメソッドでコンテキストがどのように使用されているかを示すと、助けになるはずです。そうすれば、私たちは何を嘲笑する必要があるのかを正確に知ることができます。なぜなら、1つのコンテキストモックだけしか必要とせず、そのすべてをセットアップするだけだからです。 – Nkosi