如何为这种情况编写一个刚模拟的单元测试?嵌套私人方法单元测试
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