2009-09-27 56 views
0
[Test] 
public void TestUserProfileInsert() 
{ 
    using (new TestBindingsWrapper("TestBindings", "", new TestModule())) 
    { 
    // Setup the mock the dataprovider 
    MyMocks.MockDataProvider.Setup(x => x.InsertUserProfile(It.IsAny<IUserProfile>())).Returns(1); 

    IUserProfile up = new UserProfile(); 

    IUserProfileManager manager = new UserProfileManager(); 
    int result = manager.Insert(up); 
    Assert.AreEqual(1, result); 
    MyMocks.MockDataProvider.Verify(x => x.InsertUserProfile(up), Times.Once()); 
    } 
} 

我也在用ninject。看起來,因爲我設置了返回值,真正被測試的是這個笑話還是我錯過了什麼?這個mbunit測試真的有意義嗎?

+0

你爲什麼不調用Ninject'Get'方法來激活你的對象? – 2009-10-28 14:52:59

回答

0

它正在測試manager.Insert(上)返回1,我猜是成功(或失敗的預期返回代碼。然後,我會假設最後一行是驗證您提供的模擬對象有一個它基本上測試以確保UserProfileManager正確地傳遞和使用您提供的數據提供者的數據。

注意:要使此測試更好,我會建議讓模擬返回7,然後驗證7 UserProfileManager對象只返回7,表示它一直返回1

+0

但它會插入到數據庫?該插入返回新插入的對象的ID。該ID是來自數據庫的PK列。 – user179764 2009-09-27 15:44:47

+0

在這個例子中,我幾乎可以確定1是來自模擬對象的返回。如果你需要了解更多,你應該去和你一起工作的人談談,他們知道Mock是如何工作的。我們不能神奇地告訴你公司的測試框架是如何建立的。 – tster 2009-09-27 15:49:02

0

在編寫測試時,您的冷杉不希望它執行代碼以期望的方式失敗(新代碼的預期功能或當前行爲)。 只有在那之後你是否製作你的代碼或修改測試才能讓事情通過。所以,如果這是你關於這個測試的主要問題,我建議你退後一步,問自己你真正想要測試什麼。

您發佈的代碼更像是Integration Test,而不是Unit Test,您試圖去做什麼?你的意見建議你擔心插入數據庫,,但你嘲笑一些對象。如果是單元測試,我很驚訝地看到你正在手動初始化這麼多的具體對象(例如UserProfileManager)。 MockDataProvider實際上在哪裏進入執行路徑?