如何爲這種情況編寫一個剛模擬的單元測試?嵌套私人方法單元測試
Private Method1
{
//calls private method - Method2
}
因此,當我嘲笑方法1,我需要再次在內部模擬方法2。
我使用窗體的私人訪問器來創建一個單元測試,例如。
FormName_accessor target=new FormName_accessor();
然後用這個target.Method1來調用我的單元測試。
如何爲這種情況編寫一個剛模擬的單元測試?嵌套私人方法單元測試
Private Method1
{
//calls private method - Method2
}
因此,當我嘲笑方法1,我需要再次在內部模擬方法2。
我使用窗體的私人訪問器來創建一個單元測試,例如。
FormName_accessor target=new FormName_accessor();
然後用這個target.Method1來調用我的單元測試。
這是一個嘲笑類的私有方法並驗證它們被調用的示例。
public class Item
{
public void Update()
{
Save();
}
private void Save()
{
Validate();
/// Save something
}
private void Validate()
{
/// Validate something
}
}
[Fact]
public void EnsureNestedPrivateMethodsAreCalled()
{
// Arrange
Item item = Mock.Create<Item>();
Mock.Arrange(() => item.Update()).CallOriginal().MustBeCalled();
Mock.NonPublic.Arrange(item, "Save").CallOriginal().MustBeCalled();
Mock.NonPublic.Arrange(item, "Validate").DoNothing().MustBeCalled();
// Act
item.Update();
// Assert
Mock.Assert(item);
}
注意安排模擬時,要確保原Update
和Save
方法被調用。您只需要刪除未測試的功能。在這種情況下,我們正在測試調用Update
結果調用私人成員Save
和Validate
。我們沒有測試Validate
方法的實施。
說,'Update'包含一些額外的邏輯,最後調用'Save'。在這個時候,如果我只想測試'Update'的實現,我是否需要嘲笑'Save'? – pinopino 2014-09-25 09:46:36
使用接口。 – SLaks 2013-02-22 18:01:13
如果你這樣嘲笑,你究竟在測試什麼? – 2013-02-22 18:14:28