Asp.net mvc 3 断言可能不存在的内容-nullreferenceexception
使用nUnit。结果是从MVC3控制器返回的ViewResult-它可能在那里,也可能不在那里 这管用,但有味道!有更好的办法吗Asp.net mvc 3 断言可能不存在的内容-nullreferenceexception,asp.net-mvc-3,nunit,Asp.net Mvc 3,Nunit,使用nUnit。结果是从MVC3控制器返回的ViewResult-它可能在那里,也可能不在那里 这管用,但有味道!有更好的办法吗 string errorMessage = ""; try { errorMessage = result.TempData["Error"].ToString(); } catch {} Assert.IsNullOrEmpty(errorMessage); 更
string errorMessage = "";
try {
errorMessage = result.TempData["Error"].ToString();
}
catch {}
Assert.IsNullOrEmpty(errorMessage);
更新1
越来越近。。。但无法从测试中获取正确的错误消息,如下所示:
更新2:
重构为:
string errorMessage = "";
if (result != null)
errorMessage = result.TempData["Error"].ToString();
Assert.IsEmpty(errorMessage);
更新3:
回应@Peri
public void new_trick_should_be_saved_without_error() {
var controller = new TricksController();
var formCollection = new FormCollection() {
{ "Name", "asdf" },
{ "Description", "test descr"},
{ "Votes", "4" }
};
var result = controller.Create(formCollection) as ViewResult;
string errorMessage = "";
if (result != null)
errorMessage = result.TempData["Error"].ToString();
Assert.IsEmpty(errorMessage);
}
无需尝试/捕捉 您测试的是null,而不是空字符串
Assert.IsNull(result.TempData["Error"])
或
无需尝试/捕捉 您测试的是null,而不是空字符串
Assert.IsNull(result.TempData["Error"])
或
Cheel@Valamas-添加了一个屏幕截图,上面有3个不同的案例。结果为空。我已经更新了我的答案。但是,我建议使用一个静态函数来获取ErrorMessage(结果)。您可以在其中放置空检查,并始终让它至少返回一个空字符串或空字符串。再次感谢@Valamas-am在当前代码中的简单性,所以进行了检查并在上面输入了代码。感谢您对静态fn.cheel@Valamas的建议-添加了上面3个不同案例的屏幕截图。结果为空。我已经更新了我的答案。但是,我建议使用一个静态函数来获取ErrorMessage(结果)。您可以在其中放置空检查,并始终让它至少返回一个空字符串或空字符串。再次感谢@Valamas-am在当前代码中的简单性,所以进行了检查并在上面输入了代码。感谢您对静态fn的建议。如果必须测试结果,您的测试似乎有问题!=空。可能。。已经在上面的更新3中添加了。为什么创建返回ViewResult或其他内容?基于FormCollection中的这些值,它不应该总是返回ViewResult或其他内容吗?如果必须测试if result,那么您的测试似乎有问题!=空。可能。。已经在上面的更新3中添加了。为什么创建返回ViewResult或其他内容?基于FormCollection中的这些值,它不应该总是返回ViewResult或其他值吗?