我正在为我的代码创建单元测试,我对其中一个有疑问:
[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部分,我只测试其中一个属性。
我的问题是:它是否足以测试其中一个属性,还是应该测试它们?如果我应该测试它们,是否可以自动化它,而不是测试返回对象的每个属性?
在这种情况下,最佳做法是什么?
答案 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)。
请注意,单元测试应该是彻底的。如果您不受时间限制,那么最好通过尽可能多地测试所有内容来确保一切顺利进行。