【问题标题】:Nested private methods unit testing嵌套私有方法单元测试
【发布时间】:2013-02-22 18:00:08
【问题描述】:

我如何为这个场景编写一个刚刚模拟的单元测试?

Private Method1

{

  //calls private method - Method2
}

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

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

FormName_accessor target=new FormName_accessor();

然后使用那个 target.Method1 在我的单元测试中调用。

【问题讨论】:

  • 如果你这样嘲讽,你到底在测试什么?

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


【解决方案1】:

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

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 方法的实现。

【讨论】:

  • 说,Update 包含一些额外的逻辑,最后调用Save。这个时候如果只是想测试Update的实现,需要mock掉Save吗?
猜你喜欢
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多