基于MFC的Cppunit测试用例编写步骤

软件测试驱动开发(TDD)是以测试作为开发过程的中心,他是极限编程的重要组成部分,XUnit是一个基于测试驱动开发的测试框架,其成员很多包括:JUnit,PythonUint等,CppUint是其中一个专门面向c++的测试框架。

在CppUnit中最小的测试单元称为测试方法(TestMethod),多个测试方法又可以组成一个测试用例(TestCase),多个测试用例又组成一个测试包(TestSuite)

CppUnit提供了两种测试环境,一种基于文本,一种基于GUI,在基于GUI的测试环境中,若测试不成功,进度条显示红色,反之则为绿色。

Vs环境下CppUnit开发的基本流程(MFC方式的TestRunner)

首先在所建工程中App的Instance()中屏蔽掉原有的对话框,代之以CppUnit的GUI,一般为以下形式:

CppUnit::MfcUI::TestRunner runner;

Runner.addTest(PlusTest::suite());//添加测试

runner.run();//显示UI

// PlusTest::suite()该函数返回一个指向CppUnit::Test的指针,这个指针就是整个测试的起点,CppUnit::TestFactoryRegistry()根据TestSuite的名称返回TestFactoryRegistry工厂,然后调用工厂里的makeTest()对TestSuite进行组装,这是一个递归调用,将建立起一个树状的测试结构

然后在工程头文件中建立一个PlueTest.h的头文件用以得到工厂并调用MakeTest函数

形式如下:

#include "cppunit/extensions/TestFactoryRegistry.h"

namespace PlusTest

{

   CppUnit::Test*suite()

   {

      CppUnit::TestFactoryRegistry&registry =

        CppUnit::TestFactoryRegistry::getRegistry("name");

      return registry.makeTest();

   }

}

Cpp文件所需头文件为

#include "cppunit/ui/mfc/TestRunner.h"

#include "cppunit/extensions/TestFactoryRegistry.h"

#include "PlusTest.h"

然后在工程中添加一个类例如为:CplusTestCase

代码如下:

#include <apr.h>

#include <cppunit/TestCase.h>

#include <cppunit/extensions/HelperMacros.h>

#include <unicode/unistr.h>

#pragma comment(lib,"icuuc.lib")

class CPlusTestCase :publicCppUnit::TestCase

{

   //通过这几个宏将类CPlusTestCase和方法testFind注册到了测试列表中了

//开始创建一个TestSuite(测试包)

CPPUNIT_TEST_SUITE(CPlusTestCase);

//添加TestCase(测试用例)

CPPUNIT_TEST(testFind);

//结束创建TestSuite

CPPUNIT_TEST_SUITE_END();

public:

   //!\brief Set up context before running a test

   virtual void setUp();//初始化数据成员

   //!Clean up after the test run.

   virtual void tearDown();//释放清理工作

   CPlusTestCase(void);

   ~CPlusTestCase(void);

   //测试方法

  void testFind();

另外还需要在CPlusTestCase类中的Cpp文件中加入另外一个宏:

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTestCase,"name");

//它将CPusTestCase这个TestSuite注册到了一个指定的TestFactory工厂中,这个TestSuite用PlusTest::plusSuiteName()函数返回的名字来标识(前面介绍的suite函数中就是通过这个名字来获取这个工厂的)。plusSuiteName()是PluTest这个namespace下的一个函数,他返回这个TestSuite建立的名字(本例取名为names),其实也可以不这么做,直接在宏里写入names即可,但是这样可以防止硬编码带来的麻烦。

最后实现测试用例函数即可。

在利用CppUnit进行程序测试时,如果待测程序的配置程序是DLL,一般是在待测程序的某头文件中利用形如以下的形式

#ifndef SP_CLASSIFIER_TESTDLL

#define SP_CLASSIFIER_TESTDLL

extern "C" int SP_DLP_DLLEXPORTadd (int a);

#endif

对函数进行声明,在所建工程的源文件中编写该函数的实现代码,在测试程序中再利用下面的形式调用

#ifndef SP_CLASSIFIER_TESTDLL

#define SP_CLASSIFIER_TESTDLL

extern "C" int SP_DLP_DLLIMPORTadd (int a);

#endif

JSON官网:http://www.json.org.

JSON:JavaScript对象表示法(JavaScript Object Notation)

JSON是存储和交换文本信息的语法,类似XML,但是它比XML更小,更快,更容易解析

和XML一样,JSON也是基于纯文本的轻量级的数据交换格式,由于JSON天生是为JavaScript准备的,因此JSON的数据格式非常简单,你可以用JSON传输一个简单的String,number,Boolean,也可以传输一个数组,或者一个复杂的Object对象

jsoncpp是比较出名的C++JSON解析库下载地址为:http://sourceforge.net/projects/jsoncpp.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值