我正在研究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) {
}
}
关于如何设置测试的任何建议都非常有用。
答案 0 :(得分:3)
问题和私人方法签名的含义是您需要将问题分开。
考虑经理班的责任是什么。现在考虑一下私有方法正在做什么。我怀疑你会发现私有方法不是经理类(直接)负责的 - 它正在做一些经理应该委托的事情。
将该私有方法移动到一个单独的类(作为公共方法),并使用依赖注入将其提供给管理器类,我建议通过接口执行此操作。
现在,在测试您的经理时,您可以为其构建者提供一个模拟新类的界面,以便返回您喜欢的任何内容。