6

私は MOQ フレームワークを試していますが、今は障壁にぶつかっています。ViewName プロパティの実際の値が空の文字列であるため、次の単体テストは失敗します。

これがテストに合格しない理由について、誰かが私を正しい方向に向けてもらえますか?

[TestMethod]
public void Can_Navigate_To_About_Page()
{
    var request = new Mock<HttpRequestBase>();
    request.Setup(r => r.HttpMethod).Returns("GET");
    var mockHttpContext = new Mock<HttpContextBase>();
    mockHttpContext.Setup(c => c.Request).Returns(request.Object);

    var controllerContext = new ControllerContext(mockHttpContext.Object, 
                                new RouteData(), 
                                new Mock<ControllerBase>().Object);
    var controller = new HomeController();

    controller.ControllerContext = controllerContext;
    var result = controller.About() as ViewResult;

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

以下も、空の ViewName を生成します。

        HomeController controller = new HomeController();
        ViewResult result = controller.About() as ViewResult;
        Assert.IsNotNull(result);
        Assert.AreEqual("About", result.ViewName);

モックと優れた TTD を示す Web 上の例から、上記の最初の単体テストの例のいずれかを機能させるために必要な他の配管について混乱しています。

乾杯、

アンドリュー

4

2 に答える 2

7

テストが失敗する理由は、ViewNameを明示的に指定しない場合にViewNameを決定するのは、フレームワークの奥深くにあるためです。より正確には、ビューエンジンで私は信じています。したがって、これを現状のままテストするには、要求パイプラインをさらに多くモックアウトする必要があります。

私がしていること、そしてお勧めすることは、デフォルトに依存せず、ビューを明示的に指定することです。

return View("About");

次に、値は何もモックせずにテストするためにあります。

var controller = new HomeController();
var result = controller.About() as ViewResult;
Assert.AreEqual("About", result.ViewName);
于 2009-07-30T14:37:40.810 に答える