51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4644|回复: 3
打印 上一主题 下一主题

cppuint结合实际应用的一个简单例子

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-2-14 14:41:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新建一个基于对话框的exe程序。例如名称为cppunit_example
包含
cppunit_example.cpp
cppunit_exampledlg.cpp

测试类
在cppunit_example工程中新建一个名称为CPlusTest的头文件CPlusTest.h,建立一个测试类CPlusTest:

#pragma warning(push, 3)
#include "C:\\Program Files\\cppunit-1.10.2\\include\\cppunit\\ui\\mfc\\TestRunner.h"
#include "C:\\Program Files\\cppunit-1.10.2\\include\\cppunit\\TestCase.h"
#include "C:\\Program Files\\cppunit-1.10.2\\include\\cppunit\\extensions\\HelperMacros.h"
#pragma warning(pop)
class CPlusTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(CPlusTest);
        CPPUNIT_TEST(TestEqual1);
        CPPUNIT_TEST(TestEqual2);
        CPPUNIT_TEST_SUITE_END();

public:
        CPlusTest(){};
        virtual ~CPlusTest(){};
        void setUp();
        void tearDown();
        void TestEqual1();
        void TestEqual2();
private:
        int x;
        int y;
};
新建一个名称为CPlusTest的实现文件CPlusTest.cpp
#include”stdafx.h”
#include”CPlusTest.h”
        void CplusTest::setUp()
        {
                x = 1;
                y = 2;
        };
        void CplusTest::tearDown()
        {
                x = 0;
                y = 0;
        }       
        void CplusTest::TestEqual1()
        {
                //CPPUNIT_ASSERT(x + y == 4);
        Cplus puls;
        int nResult = puls.Add(x+y);
        CPPUNIT_ASSERT_EQUAL(30,nResult);
}
        void CplusTest::TestEqual2()
        {
                //CPPUNIT_ASSERT(x + y == 3);
        Cplus puls;
        int nResult = puls.Add(x+y);
        CPPUNIT_ASSERT_EQUAL(3,nResult);
        }

在cppunit_example.cpp文件的开始加上下面语句:
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTest, "plusTest");


在cppunit_example.cpp文件的InitInstance中只需要具有下面的语句
CppUnit::MfcUi::TestRunner runner;
CppUnit::Test *pSuite = CppUnit::TestFactoryRegistry::getRegistry("plusTest").makeTest();
        runner.addTest(pSuite);
        runner.run();
此处的runner是一个mfc图形界面的,也可以是文本方式的。

说明:   现在在图形化界面中包含了三层树结构。第一层是plusTest,第二层是CPlusTest,第三层是TestPlus1和TestPlus2。 可以给getRegistry不指定参数使用默认注册的test case,即“All Tests”。

根据测试代码编写产品代码
编写完上面的测试代码后,进行编译。编译肯定通不过,编译器会告诉我们CPlus类没有声明,因为我们还没有实现CPlus类呢!现在的工作就是马上实现CPlus类,让编译通过。现在你应该了解一点“测试驱动“的味道了吧?

在cppunit_example.dsw中加入一个MFC Extension Dll的新Project,在这个Project 中加入类CPlus,它的声明如下
class AFX_EXT_CLASS CPlus
   {
      public:
          CPlus();
          virtual ~CPlus();
      public:
          int Add(int nNum1, int nNum2);
  };
仅有一个方法,就是我们的测试代码要测试的那个方法。来看看它的实现:
int CPlus::Add(int nNum1, int nNum2)
   {
        return nNum1+nNum2;
   }
把这个工程加入到你的测试工程中去,现在让前面那个包含测试代码的Project dependent这个Project,include 相关头文件 (注意把新工程生成的DLL文件链接到你的测试工程中去),Rebuild All,你会发现编译已通过。

其中
int CPlus::Add(int nNum1, int nNum2)
   {
        return nNum1+nNum2;
   }
就是你要编写的代码。也是你需要测试的代码。


(根据各位大虾的资料进行的总结)

[ 本帖最后由 dyjyhx 于 2006-2-14 14:42 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2006-2-14 14:47:24 | 只看该作者
这就是极限编程的要点,先写测试驱动,测试驱动一般无法编译的,因为你还没有被测试的代码。根据测试驱动编写被测代码。
就像上面的例子一样,我们先编写代码TestEqual1();,测试两个数的相加。根据测试代码,编写被测函数Add();
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-2-15 10:39:52 | 只看该作者
呵呵,那当然,钩上才能 dependent上,不然肯定编译不过去的
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-22 15:45 , Processed in 0.070708 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表