Shim具有外部依赖关系的组件的私有方法

时间:2018-04-16 19:56:50

标签: c# unit-testing microsoft-fakes

我正在研究Microsoft Fakes在我的项目中实施单元测试。

如果我已经正确理解,我使用存根来设置我想要测试的主要组件所依赖的外部组件(实现接口)的行为。

我使用shib来模拟运行时特定代码段的行为。

我的目标是测试一个管理器类的方法,该方法依赖于所有实现接口的其他组件。除此之外,此方法调用私有方法。 在测试方法中,我需要强制使用该私有方法的结果。

该方案类似于以下代码:

public class MyManager : IMyManager {

    private IMyDependentManager _myDependentManager;

    public MyManager(IMyDependentManager myDependentManager) {
        this._myDependentManager = myDependentManager;
    }

    public void MyMethodToTest(data1, data2,...) { // method to test
        ...
        byte[] res = MyPrivateMethod(data1); // i want to set the result of this method in order to NOT execute it, otherwise the test will fail
        ...
    }

    private byte[] MyPrivateMethod(data1) {

    }
}

关于如何设置测试的任何建议都非常有用。

1 个答案:

答案 0 :(得分:3)

问题和私人方法签名的含义是您需要将问题分开。

考虑经理班的责任是什么。现在考虑一下私有方法正在做什么。我怀疑你会发现私有方法不是经理类(直接)负责的 - 它正在做一些经理应该委托的事情。

将该私有方法移动到一个单独的类(作为公共方法),并使用依赖注入将其提供给管理器类,我建议通过接口执行此操作。

现在,在测试您的经理时,您可以为其构建者提供一个模拟新类的界面,以便返回您喜欢的任何内容。

相关问题