0

単体テストでは、ビュー名なしで View() を使用してコントローラー アクションから戻ると、ViewResult.ViewName が string.Empty に設定されていることがわかりました。これを設定するには、View() 呼び出しのパラメーターとして指定する必要があります。たとえば、次の単体テストがあるとします。

[TextFixture]
public class MyControllerTests 
{
    [Test]
    public void TestMyAction() 
    {
        var controller = new MyController();
        var result = controller.MyAction();

        Assert.AreEqual("MyAction", result.ViewName);
    }
}

次のアクションの実装により、単体テストが失敗します。

public class MyController : Controller 
{
    public ActionResult MyAction() 
    {
        return View();
    }
}

これは通過しますが:

public class MyController : Controller 
{
    public ActionResult MyAction() 
    {
        return View("MyAction");
    }
}

.NET 4.0 で ASP.NET MVC 2 (プレベータ版) を使用しています。ただし、.NET 4.0 固有のものは使用していません。ViewName は単体テストのアサーションでチェックできる信頼できるプロパティの 1 つだと思っていたので、この動作は奇妙に感じます。

4

1 に答える 1

3

これは、ASP.NET MVC のよく知られた "機能" です。マイクロソフトは最初のバージョンからそれを文書化しています...

明示的なビュー名が指定されていない場合、フレームワークは規則 ("Views\controllername\actionname" または "Shared\controllername\actionname") に基づいて名前を見つけようとします。ViewNameその慣習から逸脱したい場合にのみ関連します。したがって、単体テストは誤った仮定を行います。

HTH。

于 2009-11-18T02:32:50.637 に答える