Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套私有方法单元测试_C#_.net_Unit Testing_Telerik_Justmock - Fatal编程技术网

C# 嵌套私有方法单元测试

C# 嵌套私有方法单元测试,c#,.net,unit-testing,telerik,justmock,C#,.net,Unit Testing,Telerik,Justmock,如何为这个场景编写一个刚刚模拟的单元测试 Private Method1 { //calls private method - Method2 } 因此,当我模拟方法1时,我需要再次在内部模拟方法2 我使用表单的私有访问器创建一个单元测试,例如 FormName_accessor target=new FormName_accessor(); 然后使用target.Method1在我的单元测试内部调用。下面是一个模拟类的私有方法并验证它们是否被调用的示例 public class I

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

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);
}
公共类项目
{
公共无效更新()
{
Save();
}
私有void Save()
{
验证();
///保存一些东西
}
私有void Validate()
{
///证实某事
}
}
[事实]
“公共无效”确保调用了STEDPRIVATED方法()
{
//安排
Item=Mock.Create();
Mock.Arrange(()=>item.Update()).CallOriginal().MustBeCalled();
Mock.NonPublic.Arrange(项目“Save”).CallOriginal().MustBeCalled();
Mock.NonPublic.Arrange(项目“验证”).DoNothing().MustBeCalled();
//表演
item.Update();
//断言
模拟断言(项);
}

请注意,在安排模拟时,您希望确保调用原始的
Update
Save
方法。您只想删除未测试的功能。在本例中,我们正在测试调用
Update
是否会导致调用私有成员
Save
Validate
。我们没有测试
Validate
方法的实现。

如果您这样模拟,您实际测试的是什么?比如,
Update
包含一些附加逻辑,最后调用
Save
。此时,如果我只想测试
Update
的实现,是否需要模拟
保存