问题
让我们“画”出一幅情景图:
- 我有一个 SUT。(有一件好事:P)
- 我可以在我的 SUT 上注入一些依赖项。
- 在我做的一个方法中:new OtherClass(ParametersObtainedFromDependancies)。
- 我想在我的 SUT 中对该方法进行单元测试,而无需处理创建对 OtherClass 正常工作有意义的模拟对象的复杂性。这意味着要测试 OtherClass。
我对此的解决方案是使用委托的工厂方法:
public Func<OtherClass,Param1Type> GetOtherClass =
(param1) => new OtherClass(param1);
坏处:它是公开的。您可以将其视为一个可选依赖项,如果需要,您可以覆盖它。但无论如何,公众的气味。
好处:我不需要创建将覆盖此方法的 MyTestSUT,甚至不需要在 SUT 上使用模拟来覆盖该方法。
问题
有没有更好的解决方案?它是否正确?