單元測試我的程序時出現問題。 問題很簡單,但我不知道爲什麼這不起作用。Xcode C++使用全局變量進行單元測試
1 - >我建立我所有程序
2 - >我建立我單元測試
3 - >的測試正在運行。
當它不是從數據段獲取全局數據時,一切正常。看起來好像該變量未被初始化/或者簡單地被找到。所以當然,我所有的測試都是錯誤的。
我的問題是: 它是完全錯誤建立一個可執行文件,然後運行它的測試?或者我應該在同一時間編譯我所有的代碼+單元測試,然後運行它?還是隻是缺乏SenTesting框架?
我忘了提及這是一個C++常量字符串。不知道是否改變了一些東西。
*編輯***
我的假設是錯誤的,但我還是不明白魔術超越!似乎一個C++魔術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
}
編輯2 **
實際上這是正常的,在C++不是在這部分代碼初始化。如果我在我的可執行文件上執行nm,看起來我的C和Obj-C全局都放入了dataSegment。我認爲我的C++字符串是相同的情況下,但它實際上是放入BSS段。這意味着它是未初始化的。事實上,C++編譯器做了一些超越,並且C++字符串在main()調用之後被初始化,並且像進入dataSegment一樣進行操作。
我不知道testSuit沒有main()調用,所以C++對象從不初始化。爲了在testSuit之前調用.ctor,有一些技巧。但我也懶得解釋,這是一種話題。我剛剛用一個簡單的char數組替換了我的C++字符串,並且它的工作原理很完美,因爲我的值現在是POD。
順便說一下,如果它們只是只讀的,那麼全局變量中就沒有惡魔。 ;)
嗨csotiriou。我終於找到了一種解決方案,我忘了關閉這個話題。下面我發佈了答案,以防有人陷入同一陷阱。 –