【发布时间】:2013-10-09 13:31:42
【问题描述】:
我在对我的程序进行单元测试时遇到了问题。 问题很简单,但我不确定为什么这不起作用。
1 -> 我构建了我所有的程序
2 -> 我构建了我的 unitTest
3 -> 测试正在运行。
当不是从数据段获取全局数据时,一切正常。似乎该变量未初始化/或未找到。所以当然我所有的测试都错了。
我的问题是: 构建可执行文件然后在其上运行测试是完全错误的吗?还是我必须同时编译所有代码+单元测试,然后运行它?还是只是缺少 SenTesting 框架?
我忘了说这是一个 C++ const 字符串。不知道这是否会改变什么。
*编辑***
我的假设是错误的,但我仍然不明白超越的魔力!看起来像一个 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。
顺便说一句,如果它们只是只读的,那么全局变量中就没有魔鬼。 ;)
【问题讨论】:
标签: c++ objective-c xcode unit-testing