在ASP .NET中单元测试ViewModel的最佳实践

时间:2016-10-04 23:29:10

标签: c# asp.net-mvc unit-testing

我正在为我的代码创建单元测试,我对其中一个有疑问:

    [TestMethod]
    public void Delete_Id()
    {
        // Arrange
        Mock.Arrange(() => journalRepository.GetJournalById(1)).Returns(new Journal
        {
            Id = 1,
            Description = "TestDesc",
            FileName = "TestFilename.pdf",
            Title = "Tester",
            UserId = 1,
            ModifiedDate = DateTime.Now
        });

        // Act
        PublisherController controller = new PublisherController(journalRepository, membershipRepository);
        ViewResult result = controller.Delete(1) as ViewResult;

        // Assert
        JournalViewModel model = result.Model as JournalViewModel;
        Assert.AreEqual(model.Description, "TestDesc");
    }

正如您在上面的代码中看到的那样,我创建了一个具有多个属性的Journal对象,并将其发送到我的PublisherController进行测试。但是在代码的Assert部分,我只测试其中一个属性。

我的问题是:它是否足以测试其中一个属性,还是应该测试它们?如果我应该测试它们,是否可以自动化它,而不是测试返回对象的每个属性?

在这种情况下,最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

此案例中的最佳做法主要是基于意见。

但是,如果要比较整个对象,可以将对象作为变量,然后进行比较。

[TestMethod]
public void Delete_Id() {
    // Arrange
    var expected = new Journal {
        Id = 1,
        Description = "TestDesc",
        FileName = "TestFilename.pdf",
        Title = "Tester",
        UserId = 1,
        ModifiedDate = DateTime.Now
    };
    Mock.Arrange(() => journalRepository.GetJournalById(1)).Returns(expected);

    var controller = new PublisherController(journalRepository, membershipRepository);

    // Act
    var result = controller.Delete(1) as ViewResult;
    var model = result.Model as JournalViewModel;

    // Assert
    Assert.AreEqual(expected, model);
}

答案 1 :(得分:0)

在我看来,测试所有可用的属性将产生更可靠的测试结果。通过这样做,您将能够确定控制器更改属性值的错误,即使它不是这样做的。

你只需要使用Assert来测试每个属性(我不知道无论如何都要自动化这个ATM)。

请注意,单元测试应该是彻底的。如果您不受时间限制,那么最好通过尽可能多地测试所有内容来确保一切顺利进行。