我可以模拟无法实例化的对象吗?

Pab*_*blo 1 c# nunit unit-testing mocking

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

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

问题是,我可以模拟HWSysManager测试方法以及如何?只有很少的方法HWSysManager,模拟它们的测试功能不会有问题.如果可能的话,一个很小的例子就是如何嘲笑它.

Yus*_*dın 5

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

创建一个名为的接口 IHWSysManager

public interface IHWSysManager
{
    int OpenConfiguration(string hwPath);
}
Run Code Online (Sandbox Code Playgroud)

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

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

    public int OpenConfiguration(string hwPath)
    {
        return _hwSysManager.openConfiguration(hwPath);
    }
}
Run Code Online (Sandbox Code Playgroud)

在代码中使用这样的接口:

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

现在您可以IHWSysManager使用模拟框架模拟您的界面,或者您可以自己创建存根类.