哪位有VC下的单元测试工具,请给我一个,不胜感谢! 最好是小一些的,我现在上网不太方便,只能通过邮件收![email protected]收到后给分! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大家都很忙啊,呵呵!我倒找到一个工具CppUnit(www.xprogramming.com),还不错,介绍一下!1 安装设置环境要求:操作系统:Microsoft Windows开发工具:Microsoft Visual C++由于CppUnit是开放源代码软件,你可以将CppUnit整个加入你的工程之中,开始你的测试工作。我们并不推荐这种浪费空间和精力的方法,如果你也同意,就请按照下面的步骤安装设置CppUnit。首先你需要获得一份CppUnit的拷贝,我随文档发布了一份,你也可以到www.xprogramming.com下载最新版本,但要注意下载for Windows版本的。CppUnit是以压缩文件形式提供的,用Winzip或者WinRAR将之解压缩,然后给包含CppUnit的文件夹起一个喜欢的名字,移动到合适的地方(你后面需要在系统中添加CppUnit的路径)。好啦,下面检查一下文件夹内容和结构:CppUnit/: 或许你已经给它起了更好的名字 JConfig/: 配置文件doc/: CppUnit的文档目录examples/: 演示程序hierarchy/: 基于命令行的演示程序msvc6/: 针对Visual C++ 6.0的源代码HostApp/: 基于图形界面的演示程序 Include/: CppUnit头文件 cppunit/: extensions/: msvc6/: testrunner/:Lib/: Lib文件和Dll文件src/: CppUnit源代码cppunit/:msvc6/: 针对Visual C++ 6.0的源代码TestRunner/: 图形显示界面TestRunner的源代码检查无误后,在Visual C++中打开HostApp.dsw,把HostApp设置为active project,然后编译,Visual C++会同时编译CppUnit。现在运行HostApp,你会看到如下的窗口: 这是CppUnit的TestRunner窗口,你可以在TestRunner中选定要执行的测试工作,进行测试并查看结果。所有的测试工作被组织成一个树形结构,你可以通过Browse按钮打开Test Hierarchy对话框(如下图),选定全部或者部分测试工作,进行测试。测试完成后,如果所有测试都通过,进度条呈现绿色,否则显示红色,错误报告显示在进度条下面的列表中。测试完毕,点击Close按钮退出TestRunner,程序开始正常运行。 现在,为了让所有工程都能够方便的使用CppUnit进行测试工作,请对Visual C++进行一下设置。在Tools\Options\Directories Tab的相应栏目添加CppUnit的Include目录、Src目录、Lib目录的路径。如果你还有其他辅助工具需要设置路径,请自行完成设定(比如Visual Assist)。然后为了方便起见,请把CppUnit\Lib目录下的TestRunnerd.dll文件拷贝到C:\Windows\System32目录下。对于要使用CppUnit的工程来说,也要做一点额外的设置,打开项目设置(Projects\Settings)对话框,在Link\General\Library modules添加CppUnitd.lib和TestRunnerd.lib,在C++\C++ Language页选中Enable RTTI,在C++\General\Preprocessor Definitions中添加(也可以不加)USE_TYPEINFO。2 在工程中使用CppUnit完成了安装和设置,只需要添加很少的代码就可以在你的工程中使用CppUnit了,下面是一种比较简单的做法(其他做法请参考CppUnit的帮助文档):请创建两个新文件,在这两个文件中写各种测试代码,比如TestUnit.h和TestUnit.cpp。在TestUnit.h中添加#include <cppunit/TestCase.h>#include <cppunit/extensions/HelperMacros.h>class CUTTestCase : public CppUnit::TestCase{ CU_TEST_SUITE( CUTTestCase ); CU_TEST( Testvector2 ); CU_TEST( TestCShape ); CU_TEST_SUITE_END();protected: void Testvector2( void ); void TestCShape( void );};在UnitTest.cpp中添加#include "StdAfx.h"#include "UnitTest.h"#include "CmnHdr.h"#include <cppunit/extensions/TestSuiteBuilder.h>CU_TEST_SUITE_REGISTRATION( CUTTestCase );void CUTTestCase::Testvector2( void ){ vector2 TestRegion; assert( 0 == TestRegion.GetWidth() ); pos = CPoint( -100, -200 ); assert( 0 == TestRegion.Get( pos ) ); assert( false == TestRegion.Set( pos, 0 ) ); …… …… }void CUTTestCase::TestCShape( void ){ assert( 1 == 1 );}CU_TEST_XXX宏完成创建测试任务树的工作(参看Test Hierarchy图),你所要做的就是从CppUnit::TestCase派生出自己的测试类,编写各种测试函数,然后用CU_TEST_XXX宏创建测试任务树。注意,CppUnit会自动截获测试函数中出现的异常和错误信息,显示在测试结果中,所以,在测试函数中放心大胆的尽情攻击你的代码吧,不要客气。有了测试代码,我们还需要借助TestRunner来进行测试工作并查看结果,TestRunner弹出的时机很重要,最好在程序的各项初始化都完成以后,一般来说,有两个地方比较合适,一个是在CWinApp的InitInstance函数的最后,一个是在CDocument的OnNewDocument中。下面是在InitInstance函数中处理:#include <msvc6/TestRunner/TestRunner.h>#include <cppunit/extensions/TestFactoryRegistry.h>…………BOOL CTetricsApp::InitInstance(){ ………… TestRunner runner; runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest() ); runner.run(); …………}好啦,万事大吉,怎么样简单吧!编译运行一下,看到测试窗口TestRunner了吧!现在你就可以轻松的工作了,坚持对你的代码进行全面的测试,然后享受测试带给你的成功吧!当然,也可能你今天恰好比较衰,TestRunner出错了!看看下面的方法能不能帮助你吧。3 常见问题资源ID冲突:CppUnit的TestRunner使用了一些对话框资源,他们占用的ID范围是128-132,如果你的程序加入CppUnit后无法正常运行,检查一下ID是否有冲突,解决后再试试看。修改测试任务树:修改测试任务树后程序无法正常运行,通常是删除一些节点时会出现这种情况。比如我在学习使用CppUnit时,贪心创建了三个测试类,后来发现一个就够了,结果删除了两个测试类后再运行程序就会异常。解决方法,打开注册表编辑器(Regedit),查找到测试程序的主键,删除下面的CppUnit主键。 再放两天再结贴吧!希望能有更多的朋友看到帖子,使用CppUnit,通过测试使自己的程序更健壮!如果哪位有更好的工具!希望也能给大家分享! 各位大老们!!!!CRichEdit中插入图片问题, PreCreateWindow 里修改窗体后无法显示最大化和关闭窗口 在多核里面如何使某个线程能够独享指定CPU使用权? ado如何连接到sql server 2005 express WM_LBUTTONDOWN和WM_NCLBUTTONDOWNE有什么区别 用ATL和MFC写了个word工具栏插件,在打开多个文档时的问题! 请问,谢谢! AfxEnableControlContainer()是什么意思,表达了什么东西? 冷门函数 在VC中,怎么用API操作双向游标? 关于DO……While的问题(简单?来看一下就知道了) 高分请教!
环境要求:
操作系统:Microsoft Windows
开发工具:Microsoft Visual C++
由于CppUnit是开放源代码软件,你可以将CppUnit整个加入你的工程之中,开始你的测试工作。我们并不推荐这种浪费空间和精力的方法,如果你也同意,就请按照下面的步骤安装设置CppUnit。
首先你需要获得一份CppUnit的拷贝,我随文档发布了一份,你也可以到www.xprogramming.com下载最新版本,但要注意下载for Windows版本的。
CppUnit是以压缩文件形式提供的,用Winzip或者WinRAR将之解压缩,然后给包含CppUnit的文件夹起一个喜欢的名字,移动到合适的地方(你后面需要在系统中添加CppUnit的路径)。
好啦,下面检查一下文件夹内容和结构:
CppUnit/: 或许你已经给它起了更好的名字 J
Config/: 配置文件
doc/: CppUnit的文档目录
examples/: 演示程序
hierarchy/: 基于命令行的演示程序
msvc6/: 针对Visual C++ 6.0的源代码
HostApp/: 基于图形界面的演示程序
Include/: CppUnit头文件
cppunit/:
extensions/:
msvc6/:
testrunner/:
Lib/: Lib文件和Dll文件
src/: CppUnit源代码
cppunit/:
msvc6/: 针对Visual C++ 6.0的源代码
TestRunner/: 图形显示界面TestRunner的源代码
检查无误后,在Visual C++中打开HostApp.dsw,把HostApp设置为active project,然后编译,Visual C++会同时编译CppUnit。现在运行HostApp,你会看到如下的窗口:
这是CppUnit的TestRunner窗口,你可以在TestRunner中选定要执行的测试工作,进行测试并查看结果。所有的测试工作被组织成一个树形结构,你可以通过Browse按钮打开Test Hierarchy对话框(如下图),选定全部或者部分测试工作,进行测试。测试完成后,如果所有测试都通过,进度条呈现绿色,否则显示红色,错误报告显示在进度条下面的列表中。测试完毕,点击Close按钮退出TestRunner,程序开始正常运行。
现在,为了让所有工程都能够方便的使用CppUnit进行测试工作,请对Visual C++进行一下设置。在Tools\Options\Directories Tab的相应栏目添加CppUnit的Include目录、Src目录、Lib目录的路径。如果你还有其他辅助工具需要设置路径,请自行完成设定(比如Visual Assist)。然后为了方便起见,请把CppUnit\Lib目录下的TestRunnerd.dll文件拷贝到C:\Windows\System32目录下。
对于要使用CppUnit的工程来说,也要做一点额外的设置,打开项目设置(Projects\Settings)对话框,在Link\General\Library modules添加CppUnitd.lib和TestRunnerd.lib,在C++\C++ Language页选中Enable RTTI,在C++\General\Preprocessor Definitions中添加(也可以不加)USE_TYPEINFO。
2 在工程中使用CppUnit
完成了安装和设置,只需要添加很少的代码就可以在你的工程中使用CppUnit了,下面是一种比较简单的做法(其他做法请参考CppUnit的帮助文档):
请创建两个新文件,在这两个文件中写各种测试代码,比如TestUnit.h和TestUnit.cpp。在TestUnit.h中添加
#include <cppunit/TestCase.h>
#include <cppunit/extensions/HelperMacros.h>class CUTTestCase : public CppUnit::TestCase
{
CU_TEST_SUITE( CUTTestCase );
CU_TEST( Testvector2 );
CU_TEST( TestCShape );
CU_TEST_SUITE_END();
protected:
void Testvector2( void );
void TestCShape( void );
};
在UnitTest.cpp中添加
#include "StdAfx.h"
#include "UnitTest.h"
#include "CmnHdr.h"
#include <cppunit/extensions/TestSuiteBuilder.h>CU_TEST_SUITE_REGISTRATION( CUTTestCase );void CUTTestCase::Testvector2( void )
{
vector2 TestRegion;
assert( 0 == TestRegion.GetWidth() ); pos = CPoint( -100, -200 );
assert( 0 == TestRegion.Get( pos ) );
assert( false == TestRegion.Set( pos, 0 ) );
……
……
}void CUTTestCase::TestCShape( void )
{
assert( 1 == 1 );
}
CU_TEST_XXX宏完成创建测试任务树的工作(参看Test Hierarchy图),你所要做的就是从CppUnit::TestCase派生出自己的测试类,编写各种测试函数,然后用CU_TEST_XXX宏创建测试任务树。注意,CppUnit会自动截获测试函数中出现的异常和错误信息,显示在测试结果中,所以,在测试函数中放心大胆的尽情攻击你的代码吧,不要客气。
有了测试代码,我们还需要借助TestRunner来进行测试工作并查看结果,TestRunner弹出的时机很重要,最好在程序的各项初始化都完成以后,一般来说,有两个地方比较合适,一个是在CWinApp的InitInstance函数的最后,一个是在CDocument的OnNewDocument中。下面是在InitInstance函数中处理:
#include <msvc6/TestRunner/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
…………
BOOL CTetricsApp::InitInstance()
{
…………
TestRunner runner;
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest() );
runner.run();
…………
}
好啦,万事大吉,怎么样简单吧!编译运行一下,看到测试窗口TestRunner了吧!现在你就可以轻松的工作了,坚持对你的代码进行全面的测试,然后享受测试带给你的成功吧!
当然,也可能你今天恰好比较衰,TestRunner出错了!看看下面的方法能不能帮助你吧。
3 常见问题
资源ID冲突:CppUnit的TestRunner使用了一些对话框资源,他们占用的ID范围是128-132,如果你的程序加入CppUnit后无法正常运行,检查一下ID是否有冲突,解决后再试试看。
修改测试任务树:修改测试任务树后程序无法正常运行,通常是删除一些节点时会出现这种情况。比如我在学习使用CppUnit时,贪心创建了三个测试类,后来发现一个就够了,结果删除了两个测试类后再运行程序就会异常。解决方法,打开注册表编辑器(Regedit),查找到测试程序的主键,删除下面的CppUnit主键。