プログラムの単体テストで問題が発生しました。問題は単純ですが、なぜこれが機能しないのかわかりません。
1 -> すべてのプログラムをビルドします
2 -> unitTest をビルドします
3 -> テストが実行されています。
データ セグメントからグローバル データを取得する必要がない場合は、すべて問題ありません。変数が初期化されていないか、単に見つかっているようです。もちろん、私のテストはすべて間違っています。
私の質問は次のとおりです。実行可能ファイルをビルドしてからテストを実行するのは完全に間違っていますか? または、すべてのコードと単体テストを同時にコンパイルしてから実行する必要がありますか? それとも、SenTesting フレームワークが不足しているだけですか?
これが C++ の const 文字列であることを忘れていました。それが何かを変えるかどうかはわかりません。
*編集***
私の仮定は間違っていましたが、その先の魔法はまだわかりません! C++ マジック ホイディ フーのようですか?
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 を呼び出すには、いくつかのテクニックがあります。しかし、私はあまりにも説明するのが面倒で、それはある種のトピックです. C++ 文字列を単純な char 配列に置き換えたところ、値が POD になったので完全に機能します。
ちなみに、グローバル変数は読み取り専用であれば悪気はありません。;)