使用 Moq 对针对封闭供应商 API 编写的 'plug-in' 代码进行单元测试

Unit Testing using Moq for 'plug-in' code written against closed vendor API

假设您有一个供应商应用程序(和关联的封闭供应商 API)调用客户编写的 C# 'plugin' 代码。插件实现供应商定义的抽象 类。例如

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;
    }
}

传递到插件区域的 classes/factories 的句柄是由供应商应用程序创建的,不能在该应用程序之外创建(假设我们的构建服务器不能自发创建应用程序实例) .

我不确定如何继续使插件代码可单元测试。我能想到的唯一选择是将对象包装在接口中,然后将测试限制为测试用例,这些用例计算调用并验证这些调用的输入(如果它们是供应商对象,则无法验证输出)。这似乎没有多大价值。

这里还有我没看到的其他选项吗?像这样对插件范例进行单元测试有意义吗?

单元测试的目的是验证被测对象的行为。单元测试要快,不要依赖第三方。

集成测试的目的是验证端到端的行为。

所以你的单元测试方法是正确的。首先包装供应商对象,用您的模拟对象替换实际实现,断言您的代码以正确的方式使用正确的参数调用供应商的对象。你不应该执行完整的流程,因为它不是单元测试的责任。