在asp.net中单元测试ViewModel的最佳实践



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

    [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部分,我只测试了其中一个属性。

我的问题是:测试其中一个属性是否足够,或者我应该测试所有属性?如果我应该对它们全部进行测试,是否有可能实现自动化,而不是测试返回对象的每个属性?

这种情况下的最佳实践是什么?

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

您只需要对每个属性使用Assert进行测试(我不知道如何自动化此ATM)。

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

这种情况下的最佳实践将主要基于意见。

然而,如果你想比较整个对象,你可以把对象作为一个变量,然后比较它们。

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

最新更新