我在C#中使用了一些COM库,该库绑定到特定的硬件,没有它就无法工作。在开发/测试计算机上,我没有该硬件。使用库的方法如下所示:

using HWSysManagerLib;
bool ProcessBias(HWSysManager systemManager, string hwPath)
{
    int handle = systemManager.OpenConfiguration(hwPath);
    ...
    // some magic goes here
    // return result
}


问题是,我可以模拟HWSysManager作为测试方法吗?仅在HWSysManager中只有很少的方法,并且模拟它们的功能进行测试不会有问题。如果有可能的话,一个很小的例子将是如何模拟它的好方法。

最佳答案

您可以在此处使用适配器模式。

创建一个名为IHWSysManager的接口

public interface IHWSysManager
{
    int OpenConfiguration(string hwPath);
}


真正的实现类仅将工作委托给库:

public class HWSysManagerImpl : IHWSysManager
{
    private HWSysManager _hwSysManager; //Initialize from constructor

    public int OpenConfiguration(string hwPath)
    {
        return _hwSysManager.openConfiguration(hwPath);
    }
}


使用代码中的接口,如下所示:

bool ProcessBias(IHWSysManager systemManager, string hwPath)
{
    int handle = systemManager.OpenConfiguration(hwPath);
    ...
    // some magic goes here
    // return result
}


现在,您可以使用模拟框架模拟IHWSysManager接口,也可以自己创建存根类。

10-04 14:19