18

次の ASP.NET MVC コントローラーの Index アクションを単体テストしたいと考えています。以下のアサートの実際のパラメーターを何に置き換えますか (? でスタブ化)。

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

3 に答える 3

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

これにより、テストの読み書きが非常に簡単になると思います。

于 2010-02-25T19:44:00.117 に答える
4

結果が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 のアサートが正しくない場合はお詫びしますが、疑似コードとして見てください :)

于 2010-02-25T16:34:07.867 に答える