【问题标题】:Unit Testing using Moq for 'plug-in' code written against closed vendor API使用 Moq 对针对封闭供应商 API 编写的“插件”代码进行单元测试
【发布时间】:2015-11-25 16:34:06
【问题描述】:

假设您有一个供应商应用程序(以及相关的封闭供应商 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;
    }
}

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

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

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

【问题讨论】:

    标签: c# unit-testing mocking moq


    【解决方案1】:

    单元测试的目的是验证被测对象的行为。单元测试应该很快并且不依赖第三方。

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

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

    【讨论】:

    • 谢谢,这验证了我们团队的一些讨论点
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多