嵌套的私有方法单元测试

时间:2013-02-22 18:00:09

标签: c# .net unit-testing telerik justmock

我如何为这种情况编写一个刚刚模拟的单元测试?

Private Method1

{

  //calls private method - Method2
}

因此,当我模拟Method1时,我需要再次在内部模拟Method2。

我使用form的私有访问器来创建单元测试,例如

FormName_accessor target=new FormName_accessor();

然后使用该target.Method1来调用我的单元测试。

1 个答案:

答案 0 :(得分:3)

这是一个模拟类的私有方法并验证它们被调用的示例。

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

请注意,在安排模拟时,您需要确保调用原始UpdateSave方法。您只想删除未测试的功能。在这种情况下,我们正在测试调用Update会导致调用私有成员SaveValidate。我们没有测试Validate方法的实现。