使用Moq对';插件';针对封闭供应商API编写的代码
本文关键字:API 供应商 代码 Moq 插件 使用 | 更新日期: 2023-09-27 18:24:27
假设您有一个供应商应用程序(以及相关的封闭供应商API),它对客户编写的C#"插件"代码进行调用。插件实现由供应商定义的抽象类。例如
public class MyPlugin : AbstractVendorPlugin
{
public override VendorClass PluginMain(VendorClass vc, VendorFactory vf)
{
vc.AddCalculation("x => x*x");
ExecutionContext ec = vf.CreateExecutionContext();
vc.Execute(ec);
return vc;
}
}
传递到插件区域的类/工厂的句柄是由供应商应用程序创建的,不能在该应用程序之外创建(让我们假设我们的构建服务器不能自发创建应用程序实例)。
我不确定如何使插件代码单元可测试。我能想到的唯一选项是将对象封装在接口中,然后将测试限制在测试用例中,这些用例对调用进行计数并验证这些调用的输入(如果输出是供应商对象,则无法验证)。这似乎没有多大价值。
还有其他我看不到的选择吗?单元测试这样的插件范例有意义吗?
单元测试的目的是验证被测对象的行为。单元测试应该很快,不依赖于第三方。
集成测试的目的是验证端到端的行为。
所以你的单元测试方法是正确的。首先包装vendor对象,用您的模拟对象替换实际实现,断言您的代码使用正确的参数以正确的方式调用vendor的对象。您不应该执行全流程,因为它不是单元测试的责任。