public bool A (UserRequest foo)
{
ClientRequest boo = B(foo); //Mapping local model to client model
C(boo);
return result;
}
我想为方法A编写单元测试以测试方法B,但我不希望我的单元测试调用方法C。方法C是私有方法,但它会调用第三方客户端。我无法在单元测试中设置方法C,因为类型“ ClientRequest”在测试用例程序集中没有引用。如何在不将客户端dll的引用添加到我的测试程序集中的情况下实现该方法。如何跳过调用方法C?
答案 0 :(得分:3)
C是私有方法
由于某种原因,事情是私人的。它们是不应将使用代码与之耦合的实现细节。单元测试是消耗代码。
它会打电话给第三方客户
单元测试存在问题。不要试图分解被测试的类,深入研究其内部,最终修改其工作方式,从而首先使测试无效。
相反,隔离并模拟依赖项。在C()
中的某个位置,此类具有外部依赖关系。与其在类的深处掩盖这种依赖,不如将其包装在接口/实现中并提供给类。 (这称为“依赖注入”。有一些框架围绕此概念提供了丰富的功能,但是对于简单的情况,也可以手动实现该概念本身。)
因此,当应用程序代码使用此类时,将为实例提供依赖项的实现,该依赖项将调用外部服务。当单元测试使用此类时,实例将提供一个模拟实现,该实现伪装为调用外部服务。
然后,您的测试还可以包括模拟该服务的结果,触发受控的故障响应以测试类如何处理它们。