填充具有外部依赖项的组件的私有方法

Shim a private method of a component with external dependencies

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

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

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

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

场景类似于下面的代码:

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) {

    }
}

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

问题和私有方法签名的含义是您需要分离关注点。

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

将该私有方法移至单独的 class(作为 public 方法),并使用依赖注入将其提供给管理器 class,我建议通过一个接口。

现在,在测试您的管理器时,您可以为它的构造函数提供一个新的 class 接口到 return 的模拟,无论您喜欢什么。