单元测试我的程序时出现问题。 问题很简单,但我不知道为什么这不起作用。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。我终于找到了一种解决方案,我忘了关闭这个话题。下面我发布了答案,以防有人陷入同一陷阱。 –