我正在为我的代码创建单元测试,我有一个关于其中一个的问题:
[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);
}