使用Cast作为测试的一部分或显式使用Assert.IsInstanceOfType

时间:2012-08-14 09:15:30

标签: c# asp.net-mvc unit-testing

我对测试很陌生,并且按照以下方式编写了我的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来完成工作。

我的第二个应用程序是否可以继续?如果方法返回不同的类型,我可能会遇到依赖于强制转换抛出错误的问题?

1 个答案:

答案 0 :(得分:1)

您可以使用MVCContrib.TestHelper。允许您编写非常易读的单元测试,如:

// arrange
...

// act
var actual = controller.Create(123);

// assert
actual
    .AssertViewRendered()
    .WithViewData<FooBarCreateEditViewModel>();

查看我写的following sample单元测试。