我使用VS2010进行C ++开发,我经常最终在一些dll项目中工作,在所有编译完成后我想尝试在某些类上运行虚拟数据,但事实上它是一个dll而不是一个带有main的exe使得一个不行。那么有一种简单的方法可以做我想要的,或者我被诅咒直到永恒,将一个大项目的部分变成小型测试项目? 改变项目类型的Ofc也有效,但我想有一些几乎像iteractive shell的测试函数方式。
答案 0 :(得分:5)
我知道这不是一个库或任何东西,但是如果你想在Windows上运行dll而不将它构建成任何东西,或者编写脚本,你可以在windows中使用rundll32.exe。它允许您运行dll中的任何导出函数。语法应类似于:
rundll32.exe PathAndNameofDll,exportedFunctionName [ArgsToTheExportedFunction]
http://best-windows.vlaurie.com/rundll32.html - 是一个关于如何使用这个二进制文件的简单相关的简单教程。它有一些很酷的技巧可能让你大吃一惊。
如果你想知道一个64位版本,它有相同的名称(严重的微软?)在这里检查: rundll32.exe equivalent for 64-bit DLLs
此外,如果你想进入低级别,理论上你可以利用OllyDbg附带一个DLL加载器来运行你想要调试的DLL(在汇编中),你可以做同样类型的东西in(调用导出函数和传递args)但调试器更多用于逆向工程而不是代码调试。
答案 1 :(得分:3)
我认为你基本上有两种选择。
首先,是对函数使用某种单元测试。对于C ++,您可以找到各种实现,其中一个实现了CppUnit
第二个选项是打开DLL,通过Win32API获取函数并以这种方式调用它(这仍然可以在某种程度上作为单元测试)。您可以通过创建一个可执行文件来实现上述参数化所需的信息(例如dll路径,函数名称)以实现您提到的“交互式shell” - 如果您决定采用此路径,您可以查看关于从C ++加载DLL的this CodeProject article
答案 2 :(得分:2)
除了使用CppUnit提供的单元测试外,您仍然可以编写自己的单元测试 小测试框架。这样你可以根据需要设置你的Dll项目, 加载它,链接它,无论你想要什么,并用一些简单的数据证明它 你喜欢。
如果您有许多相互依赖的Dll来完成某项工作,那么这是有价值的。 (根据我的经验,C ++中的遗留Dll项目往往难以测试)。
完成一些框架应用程序后,您还可以检查可能性 CppUnit将为您提供并将其与您的测试框架相结合。
这样你最终会得到一套好的自动化测试,但仍然如此 有价值的单元测试。如果开始进行单元测试有点困难 一个项目已经有一定的规模。拥有自己的框架将让你 每当你对dll进行一些更改时都要编写测试。只需将其插入您的 框架,测试你期望它做什么,并越来越多地增强你的框架。
基本思想是分离测试,testrunner,testdata和断言 要做。
答案 3 :(得分:1)
我正在使用python + ctypes为我的DLL应用程序构建快速测试例程。
如果您使用的是扩展属性语法,那么对您来说很容易。
Google for Python + ctypes + test unit,你会发现几个例子。
答案 4 :(得分:1)
我建议使用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来测试它的管理和非管理(驱动程序)代码。