2010-02-25 2 views
15

Я хочу, чтобы модуль тестировал следующее действие индексатора ASP.NET MVC-контроллера. Что я могу заменить фактическим параметром в приведенном ниже утверждении (заштрихованным?).Как отключить тест ActionResult, который возвращает ContentResult?

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

ответ

20

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

[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); 
} 
4

Вы косяк тест, результат не является нулевым, то вы получите 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 Утверждает не welformed, но смотреть на него, как псевдокод

11

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

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

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

+0

Это отличная идея Сет. У меня довольно много тестов UnitResult для кода, поэтому это поможет в попытке придерживаться философии DRY. –

+0

@ Николас: Рад, что вы сочли это полезным. У других помощников у меня есть AssertActionResult.IsRedirectTo (result, url) 'и' AssertActionResult.IsViewResult (result, viewName) '. –

Смежные вопросы