Как модульный тест ActionResult, который возвращает ContentResult?
Я хочу модульное тестирование следующего ASP.NET действие индекса контроллера MVC. Что мне заменить фактический параметр в assert ниже (stubbed with ?).
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!.", ? );
}
3 ответов
используйте оператор " 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);
}
мне нравится создавать помощников утверждений для такого рода вещей. Например, вы можете сделать что-то вроде:
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!");
}
Я думаю, что это делает тесты намного проще читать и писать.
вы не можете проверить, что результат не равен null, что вы получаете 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);
}
Я извиняюсь, если NUnit утверждает, что не welformed, но посмотрите на него как на псевдо-код:)