我对测试很陌生,并且按照以下方式编写了我的Controller测试:
var result = myController.Create(It.IsAny<int>());
Assert.IsInstanceOfType(result, typeof(ViewResult));
Assert.AreEqual(string.Empty, ((ViewResult)result).ViewName, "Default view expected.");
Assert.IsInstanceOfType(((ViewResult)result).ViewData.Model, typeof(FooBarCreateEditViewModel));
这样可以正常工作但不具备可读性,因为我必须为测试2&amp; 3.另一种方法可能是:
var result = (ViewResult)myController.Create(It.IsAny<int>());
Assert.AreEqual(string.Empty, result.ViewName, "Default view expected.");
Assert.IsInstanceOfType(result.ViewData.Model, typeof(FooBarCreateEditViewModel));
这似乎也有效,在我看来更具可读性。我的问题在于它依赖于测试的“行为”部分来执行IsInstanceOfType测试,而不是显式定义Assert来完成工作。
我的第二个应用程序是否可以继续?如果方法返回不同的类型,我可能会遇到依赖于强制转换抛出错误的问题?
答案 0 :(得分:1)
您可以使用MVCContrib.TestHelper。允许您编写非常易读的单元测试,如:
// arrange
...
// act
var actual = controller.Create(123);
// assert
actual
.AssertViewRendered()
.WithViewData<FooBarCreateEditViewModel>();
查看我写的following sample单元测试。