Как unit test ActionResult, возвращающий ContentResult?
Я хочу unit test следующее действие индекса индекса ASP.NET MVC. Что я могу заменить фактическим параметром в приведенном ниже утверждении (заштрихованный?).
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class StatusController : Controller
{
public ActionResult Index()
{
return Content("Hello World!");
}
}
}
[TestMethod]
public void TestMethod1()
{
// Arrange
var controller = CreateStatusController();
// Act
var result = controller.Index();
// Assert
Assert.AreEqual( "Hello World!.", ? );
}
Ответы
Ответ 1
используйте оператор "as", чтобы сделать листинг с нулевым значением. Затем просто проверьте нулевой результат
[TestMethod]
public void TestMethod1()
{
// Arrange
var controller = CreateStatusController();
// Act
var result = controller.Index() as ContentResult;
// Assert
Assert.NotNull(result);
Assert.AreEqual( "Hello World!.", result.Content);
}
Ответ 2
Мне нравится создавать помощники утверждения для такого рода вещей. Например, вы можете сделать что-то вроде:
public static class AssertActionResult {
public static void IsContentResult(ActionResult result, string contentToMatch) {
var contentResult = result as ContentResult;
Assert.NotNull(contentResult);
Assert.AreEqual(contentToMatch, contentResult.Content);
}
}
Вы бы назвали это следующим образом:
[TestMethod]
public void TestMethod1()
{
var controller = CreateStatusController();
var result = controller.Index();
AssertActionResult.IsContentResult(result, "Hello World!");
}
Я думаю, что это делает тесты намного проще читать и писать.
Ответ 3
Вы не можете проверить, что результат не является нулевым, вы получаете ContentResult
и сравниваете значения:
[TestMethod]
public void TestMethod1()
{
// Arrange
var controller = CreateStatusController();
// Act
var result = controller.Index();
// Assert
Assert.NotNull(result);
Assert.IsAssignableFrom(typeof(ContentResult), result);
Assert.AreEqual( "Hello World!.", result.Content);
}
Я apoligize, если утверждения Nunit не приветствуются, но посмотрите на него как псевдокод:)