Как к модульному тесту ActionResult, который возвращает ContentResult?

Я хочу к модульному тесту следующий 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!.", ? );
}
16
задан Robert MacLean 21 February 2013 в 01:24
поделиться

3 ответа

использовать оператор "as", чтобы сделать nullable cast. Затем просто проверьте нулевой результат

[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);
}
21
ответ дан 30 November 2019 в 16:49
поделиться

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

4
ответ дан 30 November 2019 в 16:49
поделиться

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

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

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

11
ответ дан 30 November 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: