c - 如何对 C 代码的托管包装器进行单元测试?

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

我将围绕一些 C 函数创建一个托管 C++ 包装器,以允许它在其他 .NET 解决方案中使用。我正在考虑提供一个非常简约的包装器,例如:

C header 中的签名:

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

暴露的托管接口(interface):

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

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

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

这方面的任何指导都会很棒。 Google 搜索让我想要了解有关对托管包装器进行单元测试的更多信息。

最佳答案

在某些情况下(我想到工具限制和/或依赖复杂性),使用外部框架模拟依赖是不可能的。然后,就有了完全合法的手动编写模拟的技术(我认为这是在模拟框架流行之前做事的方式)。

这基本上就是您想要做的 - 伪造依赖性,在您的情况下恰好是 C 库。框架帮不上忙 - 您可能想尝试手动方法。

创建一些简单的、伪造的实现(很像一个 stub ,例如只返回固定值而不考虑输入参数——自然地,可能比那更复杂),编译它,让它暴露完全相同的头文件/函数和在您的测试项目中引用它。这就是伪装( stub /模拟)背后的基本思想 - 一个对象假装是另一个对象。

虽然听起来很简单,但我实际上并没有尝试过 - 对此持保留态度,更多的是将其作为您可以采用的方法的建议。这种方法的局限性(除了它在技术上是否可行)是非常差/没有配置选项(因为额外的伪造 DLL 会像硬编码的 stub 一样工作 - 配置文件可能会有所帮助,但感觉就像... 工作太多?)。

关于c - 如何对 C 代码的托管包装器进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875738/

相关文章:

c - 找出数字 5 在 0 - 4322 内出现了多少次

visual-studio-2010 - 如何在Visual Studio 2010 Ultimate中解决CVT1100?

c++ - 为什么左值转换有效?

visual-studio-2010 - 共享点 2010 : edit a view programmatically

javascript - 如何将 chai-as-promised 与 Typescript 一起使用?

c# - 如何使用内部任务对 void 方法进行单元测试

c - 通过 Hook 调用在 Windows 进程中加速或静音音频播放

c - GTK修改GtkButton的背景色

c - MinGW w64 缺少 dll

unit-testing - 如果测试失败,您如何告诉 Karma 保持浏览器窗口打开?