2016-10-04 86 views
1

我創建單元測試我的代碼,我有一個問題了其中的一個:最佳實踐進行單元測試一個ViewModel在ASP .NET

[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進行測試。然而,在代碼的斷言部分,我只測試其中一個屬性。

我的問題是:測試其中一個屬性還是應該測試它們?如果我應該全部測試它們,是否可以將其自動化,而不是測試返回對象的每個屬性?

這種情況下的最佳做法是什麼?

回答

0

在我看來,測試所有可用的屬性將產生一個更可靠的測試結果。通過這樣做,即使不想這樣做,您也可以確定控制器更改屬性值的錯誤。

你只需要使用Assert爲每個屬性測試(我不知道無論如何自動化ATM)。

請注意單元測試是徹底的。如果你不受時間限制,那麼最好通過儘可能多地測試一切來確保一切順利。

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