Visual studio 快速测试作为大型DLL项目一部分的函数

Visual studio 快速测试作为大型DLL项目一部分的函数,visual-studio,Visual Studio,我使用VS2010进行C++开发,我经常在一些DLL项目中完成工作,在所有的事情都很好地编译之后,我想尝试在一些类上运行哑数据,但是OFC的事实是它是DLL,而不是一个带有EXE的EXE,这使得它不能运行。那么,有没有一个简单的方法来做我想做的事情,或者我被诅咒到永远,把一个大项目的c/p部分变成一个小的测试项目? Ofc改变项目的类型也是可行的,但我希望有一些几乎像Itreactive shell的测试函数的方法 我想你基本上有两个选择 首先,是对函数使用某种单元测试。对于C++,你可以找到各

我使用VS2010进行C++开发,我经常在一些DLL项目中完成工作,在所有的事情都很好地编译之后,我想尝试在一些类上运行哑数据,但是OFC的事实是它是DLL,而不是一个带有EXE的EXE,这使得它不能运行。那么,有没有一个简单的方法来做我想做的事情,或者我被诅咒到永远,把一个大项目的c/p部分变成一个小的测试项目?
Ofc改变项目的类型也是可行的,但我希望有一些几乎像Itreactive shell的测试函数的方法

我想你基本上有两个选择

首先,是对函数使用某种单元测试。对于C++,你可以找到各种实现,一个查看


第二个选项是打开DLL,通过Win32API获取函数并以这种方式调用它(这在某种程度上仍然可以称为单元测试)。您可以通过创建一个可执行文件,该文件使用所需信息(例如dll路径、函数名)进行上述参数化,以实现您提到的“交互式shell”——如果您决定采用此路径,您可以查看如何从C++加载DLL

我正在使用python+ctypes为我的DLL应用程序构建快速测试例程

如果您使用的是扩展属性语法,那么这将很容易


Google for Python+ctypes+test unit,您将发现几个示例。

除了使用CPPFUnit提供的单元测试外,您还可以编写自己的单元测试 小型测试框架。这样,您可以根据需要设置Dll项目, 加载它,链接它,无论你想要什么,用一些简单的数据来证明它 你喜欢

如果您有许多相互依赖的DLL来完成某项工作,那么这是有价值的。 (C++中的遗留DLL项目在我的经验中往往难以测试)。 在完成一些框架应用程序之后,您还可以检查 CPPFUnit将为您提供并将其与您的测试框架相结合

这样,您将得到一组很好的自动化测试,这些测试仍在进行中 可值单元测试。开始进行单元测试有点困难,如果 一个项目已经有了一定的规模。拥有自己的框架将让您 无论何时对dll进行更改,都要编写测试。只要把它插入你的 框架,测试您期望它做什么,并越来越多地增强您的框架

基本思想是将测试、testrunner、testdata和断言分离
要创建。

我知道这不是一个库或任何东西,但如果您想在windows上运行dll,而不需要将其框架化或编写脚本,则可以在windows中使用rundll32.exe。它允许您运行dll中的任何导出函数。语法应类似于:

rundll32.exe路径和名称,exportedFunctionName[ArgsToTheExportedFunction]

--是一个关于如何使用这个二进制文件的很好的简单的相关教程。这里面有一些很酷的技巧,可能会让你大吃一惊

如果您想知道64位版本,它有相同的名称(说真的是microsoft?),请在此处查看:


此外,如果您想降低级别,理论上可以利用DLL加载程序附带的功能来运行要调试的DLL(在汇编中),您可以在汇编中执行相同类型的操作(调用导出的函数并传递参数)但调试器更适合于反向工程而不是代码调试。

我建议使用Windows Powershell commandlets

如果你看这篇文章,你会发现它是多么容易设置。当然,本文主要是关于测试C#代码的,但是您可以看到他们如何谈论能够以相同的方式加载任何启用COM的DLL

在这里,您可以看到如何加载COM程序集-


编辑:我知道有一家非常成功的存储虚拟化软件公司广泛使用Powershell测试其托管和非托管(驱动程序)代码。

您看过单元测试吗?prof版本的afaik VS2010没有任何UT功能。我可能错了,就像我说的afaik.Will那样你就可以使用免费的开源版本NUnit()。同样,VS 2010 PRO()不是NUnt,只是.NET,我使用了NET.NET和CLI C++。另外,请注意:它说perm或ultimWell也可以根据Wikipedia()进行单元测试。在创建新项目(包括本机版本和管理版本)的测试中,您应该具有访问权限(至少在VS 2012中)。抱歉,我还假设您使用了一些.NET功能,但是本机版本应该可以工作。然而,不同的国家…………嘎哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈