Я пишу тестовый случай, который будет иметь SetUpTestCase()
метод, который будет распределять общий ресурс, хотя я получаю неопределенные ошибки ссылочного компоновщика.
class ParsingEventsTest: public ::testing::Test {
protected:
static xml eventXml;
static void SetUpTestCase() {
ManagedObjectManagerSingleton::GET_SINGLETON().initializeTestEnvironment(PATH_TO_FILE);
eventXml= *ManagerSingleton::GET_SINGLETON().parse(PATH_TO_INPUT_FILES);
}
virtual void SetUp() {}
virtual void TearDown() {}
};
Это вызвало бы:
../test/ParsingEventsTest.o: In function `ParsingEventsTest::SetUpTestCase()':
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xa1): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xb0): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xbd): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xc2): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xce): undefined reference to `ParsingEventsTest::eventXml'
../test/ParsingEventsTest.o:ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xdd): more undefined references to `ParsingEventsTest::eventXml' follow
collect2: ld returned 1 exit status
РЕДАКТИРОВАТЬ:
Это также работает очень просто, например распределение int
class ParsingEventsTest: public ::testing::Test {
protected:
static int *x;
static void SetUpTestCase() {
x = new int [30];
}
static void TearDownTestCase() {
delete [] x;
}
virtual void SetUp() {}
virtual void TearDown() {}
};
Вы только объявили поле eventXml
, Вы должны определить это где-нибудь. В каком-то файле .cpp вы должны поставить строку вроде
xml ParsingEventsTest::eventXml;
РЕДАКТИРОВАТЬ
Что касается причины, по которой это необходимо: объявление статического члена в классе не может его определить. Если это так, то каждая единица перевода, которая включает определение класса, будет определять его. Но каждой программе нужно одно определение, поэтому вам нужно выбрать место, где член определен вне определения класса (обычно в каком-то файле .cpp. Лучше всего определить с определением функций-членов). И синтаксис выглядит как выше.
Других решений пока нет …