Как выполнить модульное тестирование ActionResult, который возвращает ContentResult? - PullRequest
15 голосов
/ 25 февраля 2010

Я хочу провести модульное тестирование следующего действия Index контроллера 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!.", ? );
}

Ответы [ 3 ]

20 голосов
/ 25 февраля 2010

используйте оператор «как», чтобы сделать обнуляемое приведение. Затем просто проверьте нулевой результат

[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);
}
11 голосов
/ 25 февраля 2010

Мне нравится создавать помощников утверждений для такого рода вещей. Например, вы можете сделать что-то вроде:

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!");    
}

Я думаю, это значительно облегчает чтение и запись тестов.

4 голосов
/ 25 февраля 2010

Вы не можете проверить, что результат не равен нулю, что вы получаете 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 утверждает, что не утешен, но посмотри на это как псевдокод:)

...