2011-10-18 18 views
0

任何人都可以幫助我嗎?基本上我有一個測試類,wihtin這個測試類我有很多方法都使用相同類型的設置。讓我舉例告訴你:使對象可用於所有方法C++

class Test:public CxxTest::TestSuite 
{ 
    public: 

    void Test1(){/*...*/} 
    void Test2(){/*...*/} 
}; 

每個測試方法要求使用相同類型的設置:

Class c_objectName = AnotherClass::method("c_name","c_name","c_name"); 
class c_newObjectName = AnotherCLass::create(c_objectName); 

我目前每個單獨的方法設置這一點,因爲每一個上面我開始用「 c _...「需要不同。

我試圖做一個「全局方法」,將採取一個字符串重命名這些每一次,但我似乎不能從方法調用訪問它們。我試過如下:

class Test:public CxxTest::TestSuite 
{ 
    public: 
    void method() 
    { Class c_objectName = AnotherClass::method("c_name","c_name","c_name"); <--- cant access these 
     Class c_newObjectName = AnotherClass::create(c_objectName); 
    } 
    void Test1(){/*...*/} 
    void Test2(){/*...*/} 
}; 

有沒有把這個在某種形式的「全球方法」,這樣我可以從方法來訪問這些的方法嗎?

我真的不擅長解釋提前

+0

你是什麼意思,「無法訪問這些」?你得到什麼錯誤? – Chad

+1

除非我錯過了一些東西,這聽起來像是在尋找「成員變量」。 – Flexo

+0

'班'是什麼?除非使用指針,否則不要在C++中用'new'創建對象。 –

回答

1

我不能讓首長和問題的尾巴事情非常抱歉和感謝,但看起來像這樣將有助於:

struct TestFixture 
{ 
     Class c_objectName; 
     Class c_newObjectName; 
}; 

TestFixture makeFixture() 
{ 
    TestFixture fixture; 
    fixture.c_objectName = new Class("c_name","c_name","c_name"); 
    fixture.c_newObjectName = create(c_objectName); 
    return fixture; 
} 

(假設你的Class(classes?)是可複製的),如果沒有,則返回一個指向TestFixture的新實例的指針或類似於scoped_ptr

然後你可以在你的測試方法中使用它:

void Test1() 
{ 
     TestFixture fixture = makeFixture(); 
     // use fixture.c_objectName etc. 

如果您不介意共享數據,您可以將它們放在Test類的字段中。

編輯哦,我才意識到你正在使用CxxTestwhich probably has a better way of creating fixtures/setup/teardown for unit tests。但是,上述方法應該在任何框架下工作。

+0

你是對的我正在使用Cxx,但我仍然不知道如何使它正確,我也沒有寫「新」的意思,我只是想顯示一個粗略的草圖,我已經編輯上面顯示此 –

相關問題