我如何为这种情况编写一个刚刚模拟的单元测试?
Private Method1
{
//calls private method - Method2
}
因此,当我模拟 Method1 时,我需要再次在内部模拟 Method2。
例如,我使用表单的私有访问器来创建单元测试。
FormName_accessor target=new FormName_accessor();
然后使用该 target.Method1 在我的单元测试中调用。
我如何为这种情况编写一个刚刚模拟的单元测试?
Private Method1
{
//calls private method - Method2
}
因此,当我模拟 Method1 时,我需要再次在内部模拟 Method2。
例如,我使用表单的私有访问器来创建单元测试。
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
方法的实现。