У меня проблема при тестировании моей программы. Проблема проста, но я не уверен, почему это не работает.Xcode C++ Модульное тестирование с глобальной переменной
1 -> я построить всю свою программу
2 -> я построить мой UnitTest
3 -> тест работает.
Все в порядке, когда речь идет не о получении глобальных данных из сегмента данных. Кажется, что переменная не инициализируется/или просто не найдена. Поэтому, конечно, все мои тесты становятся неправильными.
Мой вопрос: Неправильно ли построить исполняемый файл, а затем запустить тест на нем? Или мне нужно скомпилировать весь мой код + модульный тест в одно и то же время, а затем запустить его? Или это просто отсутствие рамки SenTesting?
Я забыл упомянуть, что это строковая константа C++. Не знаю, если это что-то изменит.
* EDIT ***
Мое предположение было неправильно, но я до сих пор не понимают магию за пределами! Кажется, C++ magic hoydi hoo?
char cstring[] = "***";
std::string cppString = "***";
NSString* nstring = @"***";
- (void)testSync{
STAssertNotNil(nstring, nil); // fine
STAssertNotNil((id)strlen(bbb), nil); // fine
STAssertNotNil((id)cppString.size(), nil); // failed
}
EDIT 2 **
На самом деле это нормально, что C++ не инициализирован в этой части кода. Если я выполняю nm на моем исполняемом файле, кажется, что мои C и Obj-C global помещены в dataSegment. Я думал, что моя строка C++ была в одном и том же случае, но она фактически помещается в сегмент bss. Это означает, что он неинициализирован. Дело в том, что компилятор C++ выполняет некоторую магию, а строка C++ инициализируется после вызова main() и действует, как если бы она была в dataSegment.
Я не знал, что testSuit не имеет вызова main(), поэтому объект C++ никогда не инициализируется. Существует некоторая методика, чтобы вызвать .ctor перед тестом testSuit. Но я слишком ленив, тоже объясняю, и это какая-то тема. Я только что заменил мою строку C++ на простой массив символов, и он отлично работает, поскольку моя ценность теперь POD.
Кстати, в глобальной переменной нет дьявола, если они только для чтения. ;)
Hi csotiriou. Я наконец нашел своеобразное решение, я просто забыл закрыть тему. Ниже я отправил ответ, если кто-то попадает в ту же ловушку. –