如何围绕C代码对托管包装器进行单元测试?

时间:2012-01-16 04:23:33

标签: c visual-studio-2010 unit-testing dependency-injection managed-c++

我将围绕一些C函数创建一个Managed-C ++包装器,以允许它在其他.NET解决方案中使用。我正在寻找一个非常简约的包装器,如:

C标题中的签名:

void DOSTH(const char*, short, long*);

公开的托管界面:

public void doSomething(String^ input, short param, [Out] long^ %result);

为此,我的解决方案将包含C头,并将引用包含我正在构建的已编译C API的.dll。

作为Visual Studio新手,我不确定如何对其进行单元测试。是否可以模拟.dll来提供模拟实现?是否有一个图书馆可以让这种任务变得简单?是否有一个特定的解决方案结构,我应该努力使这更容易?

这方面的任何指导都会很棒。谷歌的搜索让我想要了解有关单独测试托管包装的更多信息。

2 个答案:

答案 0 :(得分:2)

在某些情况下(工具限制和/或依赖复杂性出现在我的脑海中),使用外部框架模拟依赖是不可能的。然后,手动编写模拟的完全合法的技术(我认为这是在模拟框架越来越受欢迎之前做事的方式)。

这基本上就是你想要做的 - 假冒依赖,在你的情况下碰巧是C库。框架无法帮助 - 您可能想尝试手动方法。

创建一些简单的伪造实现(非常类似于存根,例如,只返回固定值而不管输入参数 - 当然,可能比这更复杂),编译它,让它暴露完全相同的头/函数和在您的测试项目中引用它。这是假装背后的基本思想(存根/模拟) - 一个对象假装是另一个。

听起来很简单,我实际上并没有尝试过这种方法 - 把它当作一粒盐,更多的是建议你可以去哪种方式。这种方法的局限性(除了它实际上是否在技术上可行)是非常差/无配置选项(因为额外伪造的DLL会像硬编码的存根一样 - 配置文件可能会有所帮助,但感觉就像......工作太多了?)。

答案 1 :(得分:0)

您是否只需要能够存储/模拟您的包装器,以便您的测试不依赖于本机dll?

然后,您可以为包装器声明一个抽象基类,编写一个调用本机dll的实现,另一个实现用于返回固定值的测试目的。或者您可以使用MoqRhino.Mocks之类的框架来模拟您的包装器。

相关问题