我使用 VS2010 进行 C++ 开发,我经常最终在一些 dll 项目中工作,并且在一切都编译好之后,我想尝试在某些类上运行虚拟数据,但事实上它是一个 dll 而不是一个 exe main 让它成为不可能。那么有没有一种简单的方法来做我想做的事,或者我被诅咒直到永远将一个大项目的部分 c/p 变成一个小测试?Ofc 更改项目的类型也可以,但我想有一些几乎像迭代 shell 测试功能的方式。
5 回答
我知道这不是一个库或任何东西,但如果你想在 Windows 上运行 dll 而不将其构建成任何东西或编写脚本,你可以在 Windows 中使用 rundll32.exe。它允许您在 dll 中运行任何导出的函数。语法应该类似于:
rundll32.exe PathAndNameofDll,exportedFunctionName [ArgsToTheExportedFunction]
http://best-windows.vlaurie.com/rundll32.html - 是一个关于如何使用这个二进制文件的很好的简单但相关的教程。它有一些很酷的技巧,可能会让你大吃一惊。
如果您想知道 64 位版本,它具有相同的名称(真的是微软?)在这里查看: rundll32.exe 等效于 64 位 DLL
此外,如果你想进入低级别,理论上你可以使用OllyDbg,它带有一个 DLL 加载器来运行你想要调试的 DLL(在汇编中),你可以在其中做相同类型的事情(调用导出的函数并传递args),但调试器更多的是用于逆向工程而不是代码调试。
除了使用 CppUnit 提供的单元测试外,您还可以编写自己的小型测试框架。这样你就可以根据需要设置你的 Dll 项目,加载它,链接它,无论你想要什么,并用一些你喜欢的简单数据来证明它。
如果您有许多相互依赖的 Dll 来完成某项工作,这是很有价值的。(根据我的经验,C++ 中的遗留 Dlls 项目往往难以测试)。
完成一些框架应用程序后,您还可以检查 CppUnit 提供给您的可能性并将其与您的测试框架结合起来。
这样你最终会得到一套很好的自动化测试,它们仍然是有价值的单元测试。如果项目已经有一定规模,开始进行单元测试有点困难。拥有自己的框架可以让您在对 dll 进行一些更改时编写测试。只需将其插入您的框架,测试您期望它做什么并越来越多地增强您的框架。
基本思想是将测试、测试运行程序、测试数据和要进行的断言分开。
我正在使用 python + ctypes 为我的 DLL 应用程序构建快速测试例程。
如果您使用扩展属性语法,对您来说会很容易。
Google for Python + ctypes + test unit 你会发现几个例子。
我会推荐 Window Powershell 命令行开关。
如果您查看此处的文章 - http://msdn.microsoft.com/en-us/magazine/cc163430.aspx,您会发现设置起来是多么容易。当然,这篇文章主要是关于测试 C# 代码,但你可以看到他们是如何谈论能够以同样的方式加载任何启用 COM 的 DLL。
在这里您可以看到如何加载 COM 程序集 - http://blogs.technet.com/b/heyscriptingguy/archive/2009/01/26/how-do-i-use-windows-powershell-to-work-with -junk-e-mail-in-office-outlook.aspx
编辑:我认识一家非常成功的存储虚拟化软件公司,它广泛使用 Powershell 来测试它的托管和非托管(驱动程序)代码。