我对测试很陌生,并且一直在编写我的控制器测试,如下所示:
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 和 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 来完成这项工作。
那么我的第二个方法可以继续吗?如果方法返回不同的类型,我可能会遇到依赖强制转换抛出错误的问题?