对***次接触到C/C++的用户和学者来说,了解C/C++的概念是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言。。。
如果使用VC6,那么直接用VC6打开VC工程文件,选择Batch Build(***自己对工程参数重新设置一下),然后就可以在源代码包子目录Lib中得到我们需要的库文件。如果使用C/C++,那么用VC8打开VC6工程文件,并按提示直接转换成.net版本。
同样,选择批生成,生成我们需要的库文件。在VC8中编译源代码时会出现编译错误“#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids”,将version("7.0")改为version("8.0")即可。
在开发应用程序过程中,我们可能会使用到很多第三方程序库,如这里的CppUnit。为了方便,我们可以建立一个第三方程序库的专用文件夹,并为具体的程序库(如这里的CppUnit)建立子文件夹。然后在VC的Option中分别设置库的头文件路径和库文件连接路径。
如果有Dll文件,则在系统变量PATH中加进DLL文件所在目录,这样,程序运行时就能搜索到该C/C++(注意,只有VC重启后,PATH设置才会对从VC里直接运行的程序生效)。
同样,这里我们也把CppUnit的头文件和库文件路径加到VC的默认搜索路径中。另外,需要指出,一般情况下,Dll文件是需要与生成的程序一同发布的,此时就必须将Dll文件拷贝到Project目录中。此时,可以采取手动方式,也可以在Project的Post-Build Step中添加命令执行拷贝动作。
在VC中使用CppUnit进行单元测试时,可以选择CppUnit的控制台测试作界面和图形测试界面。控制台界面简洁,而图形界面较直观,并且借助CppUnit提供的插件可以快速定位到断言失败的地方。一般情况下。#t#
我们使用控制台测试界面来测试Console程序,使用图形测试界面来测试GUI程序,这样测试Project不会影响被测试的Project。由于图形测试界面的易用性,我们可能也希望用它来测试Console程序,此时稍微麻烦一点。下面分别介绍这几种用法(以VC6为例,VC8类似)。
在下面的叙述中,把被测试Project叫做目标Project,把被测试类叫做目标类。使用CppUnit的Console测试界面测试Console程序
1. 创建一个工作区用于开发和测试,然后在该工作区中分别创建两个Project,一个用于开发,另一个用于测试。
2. 在测试Project中,设置如下:
(1)设置连接库:cppunit.lib(Release版)和cppunitd.lib(Debug版),或者使用动态链接库版本cppunit_dll.lib、cppunit_dll.dll和cppunitd_dll.lib、cppunitd_dll.dll;
(2)在C/C++的Code Generation中设置Use run-time library为Multithreaded Dll(Release版)和Debug Multithreaded Dll(Debug版)。
3. 为测试Project添加测试类,假如被测试的目标类为Demo,那么可以定义一个DemoTest的测试类:
- class DemoTest: public CppUnit::TestFixture
- {
- CPPUNIT_TEST_SUITE(DemoTest); // 参数为本测试类名
- CPPUNIT_TEST(testFunc); // 参数为测试函数名,与下面声明的测试函数对应
- CPPUNIT_TEST_SUITE_END();
- public:
- void setUp() {
- // 在这里进行测试的初始化工作
- }
- void tearDown() {
- // 在这里进行测试完毕后的清理工作
- }
- void testFunc(); // 测试函数,用来测试目标类的某一个细节
- };
- #endif // DEMO_TEST_H
- 文件DemoTest.cpp:
- #include "DemoTest.h"
- #include "../Demo/DemoTest.h" // 这里为要测试的目标类的头文件路径,因为测试时要用到Demo类
- #include <cppunit/extensions/HelperMacros.h>
- CPPUNIT_TEST_SUITE_REGISTRATION(DemoTest);
- void DemoTest::testFunc()
- {
- // 这里对Demo类进行测试,可以使用CPPUNIT_ASSERT、CPPUNIT_ASSERT_EQUAL等来断言
- }