首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旧版C++Builder上的DUnit?

旧版C++Builder上的DUnit?
EN

Stack Overflow用户
提问于 2014-04-07 16:42:18
回答 1查看 466关注 0票数 0

我们目前正在将在C++Builder 5下开发的源代码迁移到较新的Embarcadero的XE5。考虑到未来,我们希望在C++Builder5下编写我们的单元测试,理想情况下,它将在迁移后具有完整的功能,几乎不需要维护。

不过,我的问题很简单。是否有可能在C++Builder 5上使用Embarcadero的相同DUnit框架?如果是这样的话,您能给我们一些提示吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-04-08 22:49:00

DUnit确实可以在CppBuilder5上使用。为此,请执行以下操作:

使用以下命令行从此处获取DUnit的源代码:

  • ,或者您可以创建一个.bat文件并从/dunit/src文件夹执行该文件:

SET NDC6=C:\PROGRA~2\Borland\CBUILD~1 %Ndc6%\ -+TextTestRunner.obj \dcc32.exe Dunit.dpr /O..\objs /DBCB /M /H /W /JPHN -$d-l-n+p+r-s-t-w-y- %2%3%4 %NDC6%\bin\tlib.exe DUNITRTL.lib /P32 -+dunit.obj -+DunitAbout.obj -+DUnitMainForm.obj -+GUITestRunner.obj -+TestExtensions.obj -+TestFramework.obj -+TestModules.obj bin

一旦完成,创建一个测试项目就变得很容易:

从项目中创建一个VCL Form application.

  • Remove Unit1.cpp。

  • 添加我们构建到项目中的DUNITRTL.lib文件(项目>添加到库和包含路径的Add to Project).

  • Add /dunit/src路径。(项目>选项> Folder/Conditions).

  • Go到Project1.cpp文件,并确保它如下所示:

代码语言:javascript
复制
    #include <vcl.h>
    #pragma hdrstop

    #include <GUITestRunner.hpp>

    USERES("Project1.res");
    USELIB("DUNITRTL.lib");
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
      try
      {
         Application->Initialize();
         Guitestrunner::RunRegisteredTests();
      }
      catch (Exception &exception)
      {
         Application->ShowException(&exception);
      }
      return 0;
    }

  • 将一个新单元添加到项目中,该单元将用作TestSuite。

MyTestCase.h

代码语言:javascript
复制
    //---------------------------------------------------------------------------
    #ifndef __TMYTESTCASE_H__
    #define __TMYTESTCASE_H__
    //---------------------------------------------------------------------------
    #include <TestFramework.hpp>
    class TMyTestCase : public TTestCase
    {
      public:
        __fastcall virtual TMyTestCase(AnsiString name) : TTestCase(name) {}
        virtual void __fastcall SetUp();
        virtual void __fastcall TearDown();

      __published:
        void __fastcall MySuccessfulTest();
        void __fastcall MyFailedTest();
    };
    #endif

MyTestCase.cpp

代码语言:javascript
复制
    #include <vcl.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    #include "TMyTestCase.h"
    //---------------------------------------------------------------------------

    void __fastcall TMyTestCase::SetUp()
    {}        
    void __fastcall TMyTestCase::TearDown()
    {}

    void __fastcall TMyTestCase::MySuccessfulTest()
    {
      int a = 1;
      a = a + 1;
      CheckEquals(2,a,"test adding");
    }

    void __fastcall TMyTestCase::MyFailedTest()
    {
      int a = 1;
      a = a + 2;
      CheckEquals(2,a,"test adding");
    }

    static void registerTests()
    {
      _di_ITestSuite iSuite;      
      TTestSuite* testSuite = new TTestSuite("Testing TMyTestCase.h");

      if (testSuite->GetInterface(__uuidof(ITestSuite), &iSuite))
      {
        testSuite->AddTests(__classid(TMyTestCase));
        Testframework::RegisterTest(iSuite);
      }
      else
      {
        delete testSuite;
      }
    }

    #pragma startup registerTests 33
    #pragma package(smart_init)

  • 该项目可以编译和运行。测试应该可以顺利执行。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22907507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档