[英]Inherit from two abstract classes, where one of them also needs parts of the other base class
[英]Two abstract classes, deriving from the same base class. How can I access a pointer from one abstract class to the other
我正在為我的 cppUnit 測試工具編寫一個助手 class 以打印帶有空格的測試描述。 由於測試工具連接了各種元素以命名測試 class,因此測試名稱中的空格會導致錯誤。 這聽起來可能微不足道,但是當您查看測試 output 的 60 個測試時,這些測試都類似地命名為 run on sentence in camel case,空格很好。
因為我不想碰線束,所以我創建了我的助手 class 以便它派生自 class 測試,每個單獨的測試也是從測試派生的 class。 我不擅長多態性,所以請耐心等待。 我要做的是從我的助手 class 成員 getName() 訪問單元測試 class ,這是從測試庫 class 繼承的公共成員。
這是我迄今為止所做的摘錄。 它確實有效,但是我希望在實際調用這個 function 時更干凈一些。
測試助手類
class TestHelperClass : public Test
{
public:
virtual ~TestHelperClass(){}
template <typename T>
static const char* getReadableName(T testClassPtr)
{
char * uglyName;
int ugLen;
ugLen = strlen(testClassPtr->getName().asCharString());
uglyName = (char*)malloc(ugLen);
memcpy(uglyName, testClassPtr->getName().asCharString(), ugLen);
std::string prettyName;
// Handle conversion...
free(uglyName);
return prettyName.c_str();
}
};
單元測試
僅供參考,這是一個宏,采用兩個 arguments 一個組和一個名稱,並生成一個繼承測試 class 的 class。
TEST(groupNameString, reallyLongTestDescriptionString)
{
printf("%s\n", TestHelperClass::getReadableName(this));
// remainder of the unit test.
}
顯然,我遠非不完整。 我想知道的是:
有沒有辦法在不提供 function 參數的情況下訪問指向單元測試 class 的指針?
有什么辦法不讓它成為 static function?
如果上述一個或兩個答案是否定的,有沒有辦法使用宏為用戶創建一個更簡單的界面,編寫測試?
您可以將 getReadableName function 作為測試 class 的一部分。 然后,您派生的 class 可以直接訪問它。
Test(groupNameString, reallyLongTestDescriptionString)
{
printf("%s\n", this->getReadableName());
// remainder of the unit test.
}
您可以使用宏中給出的名稱在 Test class 中設置一個受保護的變量,該變量將在您的 getReadbleName 中進行轉換。 順便說一句,您不需要模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.