2

我已经用 C++ 为 Rad Studio Berlin 构建了 DUnitX 示例。该代码是以下内容的副本:http ://docwiki.embarcadero.com/RADStudio/Seattle/en/DUnitX_Overview

标题是:

 class __declspec(delphirtti) TestCalc : public TObject
 {
  public:
    virtual void __fastcall SetUp();
    virtual void __fastcall TearDown();

  __published:
     void __fastcall TestAdd();
     void __fastcall TestSub();
  };

调用 TestAdd 和 TestSub 是因为它们在 __published 下,但从不调用 SetUp 和 TearDown。我知道每次测试都应该打电话给他们。看到 Delphi 代码,我可以看到 [Setup] 属性,但似乎对于 C++ 是没有必要的。我错过了什么吗?

4

3 回答 3

2

我也有同样的问题。

作为一种解决方法,我开发了一个小助手类:

template <typename T>
class TestEnviroment{
public:
    TestEnviroment(T* theTest)
        :itsTest(theTest)
    { itsTest->SetUp(); }

    ~TestEnviroment() { itsTest->TearDown(); }

private:
    T* itsTest;
};

这是每个测试用例中的第一个局部变量:

void __fastcall UnitTest::Test()
{
    TestEnviroment<UnitTest> testenv{this};

    // TODO Testing
}
于 2016-10-28T11:48:06.390 回答
0

解决此问题的一种解决方案是覆盖 TObject 基类的以下两个虚拟方法:

virtual void __fastcall AfterConstruction(void);
__fastcall virtual ~TTestCalc(void);

The first method is executed after the object was created and calls SetUp and the second method overrides the virtual destructor to call TearDown.

Complete solution:

class __declspec(delphirtti) TTestCalc : public TObject
{
public:
    __fastcall virtual ~TTestCalc();
    virtual void __fastcall AfterConstruction();
    virtual void __fastcall SetUp();
    virtual void __fastcall TearDown();

__published:
    void __fastcall TestAdd();
    void __fastcall TestSub();
};
//---------------------------------------------------------------------------

__fastcall TTestCalc::~TTestCalc()
{
TearDown();
}
//---------------------------------------------------------------------------

void __fastcall TTestCalc::AfterConstruction()
{
SetUp();
TObject::AfterConstruction();
}
//---------------------------------------------------------------------------

// Other methods ...
于 2018-11-23T23:40:09.990 回答
0

use:

class __declspec(delphirtti) TestCalc : public TTestCase

instead of:

class __declspec(delphirtti) TestCalc : public `TObject

于 2020-12-07T16:09:16.010 回答