1

WebFormsMVP コードに対して C# でいくつかの単体テストを作成しています。私のコード内には、特定の条件が満たされた場合にいくつかのアイテムがあります-私は呼び出します

Response.Redirect("urlToGoTo", true);

しかし、リダイレクト後のすべてのコードはまだ実行されているようです。これはnunitのバグですか?または、次のようなコードを書く以外にできることはありますか?

if(somethingTrue){
    Response.Redirect("toUrl", true);
    return;
}

var keepGoing = someMoreProcesses();
Response.Redirect("toSomeOtherUrl", true);

--編集開始--

次のコードでは、Response.Redirect が 1 回呼び出されたことを確認するテストがある場合、 Responseは最初のRedirectの後に終了する必要がありますが、複数回呼び出されたことを示します。

if(somethingTrue){
    //This should end the response!
    Response.Redirect("toUrl", true); 
}
//but this still runs in the unit test
var keepGoing = someMoreProcesses();
Response.Redirect("toSomeOtherUrl", true);

--編集終了--

また、次のようなmoq'd httpコンテキストを設定していることも述べておく必要があります。

 HttpContext = new Mock<HttpContextBase>();
 Request = new Mock<HttpRequestBase>();
 Response = new Mock<HttpResponseBase>();
 Session = new Mock<HttpSessionStateBase>();

 HttpContext.Setup(x => x.Request).Returns(Request.Object);
 HttpContext.Setup(x => x.Response).Returns(Response.Object);
 HttpContext.Setup(x => x.Session).Returns(Session.Object);

moq Response でセットアップできるものはありますか?

4

1 に答える 1

0

単体テスト中は Response.Redirect へのアクセスは避けたほうがよいでしょう。これに取り組む 1 つの方法は、Response.Redirect("toUrl", true); の周りにラッパー クラスを作成することです。そして今、単体テストでメソッドを確実にスタブ化できます。b Response.Redirect が呼び出されたかどうかを確認できます。

public interface IHttpContextWrapper
{
    void Reditect(strinh url)
} 

あなたの実装

 public class HttpContextWrapper :IHttpContextWrapper
 {
     publlic void Reditect(string url)
     {
            Response.Redirect(url, true);       
     }
 } 

あなたのSut(テスト中のシステム)で、このクラスを依存関係として注入し、リダイレクトを呼び出します

単体テストでは、HttpContextWrapper.Redirect メソッドをスタブ/モックできます。

アップデート:

「これはnunitのバグですか?」という質問の1つ いいえ、これはテスト実行コンテキストに関連していることは確かです。テスト実行コンテキスト (スタブ化された HttpContext とスタブ化された Response オブジェクト) で実行しています。これらは通常どおりに機能せず、Response.Redirect の後でも実行が継続する原因となっている可能性があります。

この問題を解消するためにとられたアプローチがあり、以下のブログ投稿に出くわしました. リダイレクト中に例外をスローするようにスタブ化された Response オブジェクトを構成できる場合、実行が中断されるため、検証できるようです。詳細については、以下をご覧ください。

http://joelabrahamsson.com/performing-and-testing-redirects-with-aspnet-web-forms-mvp/

于 2013-10-09T01:35:14.740 に答える