0

ViewEngine を作成しました (デスクトップ、タブレット、iPhone 用):

public ViewEngine()
{
    Set 3 Locations
};

public override ViewEngineResult FindView(ControllerContext controllerContext, 
                                            string viewName, string masterName, bool useCache)
{
    Assign view locations...
}

次に、単体テスト クラスを作成しました。

[Test]
public void Test_IPad_UserAgent()
{
    var controllerContext = new Mock<ControllerContext>();
    var controller = new PaymentController();

    controllerContext.SetupGet(p => p.HttpContext.Request.UserAgent).Returns("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");

    controller.ControllerContext = controllerContext.Object;
    var result = controller.Index() as ViewResult;
    var viewData = result.ViewData;

}

私の質問は、ビュー エンジンがさまざまな UserAgent 文字列に対して正しいビューを返すかどうかを確認するアサートをどのように作成すればよいですか?

誰かが私を助けてくれるなら、ViewEngine の完全なコードを喜んで提供します。

4

1 に答える 1

0

探している適切な ViewEngine の ViewEngineCollection プロパティを確認できます。次のようなものを試してください:

Assert.IsInstanceOf<MyCustomViewEngine>(result.ViewEngineCollection.First());

返された実際のビューなど、ViewEngine の型以外のものをテストする必要がある場合は、FindView メソッドでカスタム ViewEngine を介してそのような情報を提供することをお勧めします。たとえば、ViewData でいくつかの情報を提供し、テストでその情報を確認できます。例えば:

view.ViewData.Add("path", "MyCustomPath/" + partialViewName;

必要な理由の詳細については、この質問を参照してください: Get View Name where ViewResult.ViewName is empty string for Unit Testing

于 2013-10-14T18:13:18.037 に答える