DUnit в старых версиях C++Builder?

В настоящее время мы переносим наши исходные коды, которые были разработаны в C++Builder 5, на более новый Embarcadero XE5. Думая о будущем, мы хотели бы написать наши модульные тесты на C++Builder5, которые в идеале будут полностью функциональными после миграции с минимальным обслуживанием или вообще без него.

Хотя вопрос у меня простой. Можно ли использовать ту же платформу DUnit, что и Embarcadero, в C++Builder 5? Если да, не могли бы вы дать нам какие-нибудь подсказки?

Спасибо.


person Achraf LEBRAZI    schedule 07.04.2014    source источник
comment
В настоящее время мы переносим наши исходные коды, которые были разработаны в C++Builder 5, на более новый Embarcadero XE5 - выделили для этого несколько недель... :) Мне потребовалось достаточно много времени, чтобы перейти с BDS2006 на XE5.   -  person M.M    schedule 01.05.2014


Ответы (1)


DUnit действительно можно использовать на CppBuilder5. Для этого:

  • Получите исходный код DUnit отсюда: http://sourceforge.net/projects/dunit/files/latest/download
  • Соберите DUNITRTL.lib, используя следующие командные строки, или вы можете создать файл .bat и запустить его из папки /dunit/src:

    SET NDC6=C:\PROGRA~2\Borland\CBUILD~1
    %NDC6%\bin\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 -+TextTestRunner.obj
    

После этого создание тестового проекта становится простым:

  • Создайте приложение формы VCL.
  • Удалите Unit1.cpp по его форме из проекта.
  • Добавьте файл DUNITRTL.lib, который мы встроили в проект (Проект > Добавить в проект).
  • Добавьте пути /dunit/src как к библиотеке, так и к включенным путям. (Проект > Параметры > Папка/условия).
  • Перейдите к файлу Project1.cpp и убедитесь, что он выглядит следующим образом:
    #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

    //---------------------------------------------------------------------------
    #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

    #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)
  • Проект можно скомпилировать и запустить. Тесты должны выполняться без сучка и задоринки.
person Achraf LEBRAZI    schedule 08.04.2014