当我在XCode 5中运行测试时,我的OS X应用程序的主窗口会在运行测试时出现几秒钟。为什么?即使我取消注释所有测试,它仍然打开我的主窗口。
您正在运行应用程序测试,而不是逻辑测试。这意味着将启动应用程序实例,然后运行单元测试。这允许您执行一些需要应用程序正在运行的集成测试。
这里是设置应用程序测试和逻辑测试的指南。
如果您想将其更改为逻辑测试(以使其运行更快且不需要首先启动您的应用程序):
Bundle
没错,你需要从构建设置中删除"Bundle Loader"和 "Test Host"。
但是,你需要将必要的实现文件添加到你的单元测试目标中。这些必要的文件是你想在单元测试中使用的文件。你需要这样做是因为在逻辑测试中,XCode不会编译整个应用程序。所以你的一些文件会丢失。
如果你遗漏了一个文件,这是一个错误信息:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_Module", referenced from:
objc-class-ref in Lobic Network.o
objc-class-ref in Logic_Unit.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
通过选择实现文件并打开文件检查器,您可以添加缺失的文件。那里将会有一个名为“目标成员资格”的部分,您可以在那里将文件的目标成员资格设置为您的单元测试。
in main.m
static bool isRunningTests()
{
NSDictionary* environment = [[NSProcessInfo processInfo] environment];
NSString* testEnabled = environment[@"TEST_ENABLED"];
return [testEnabled isEqualToString:@"YES"];
}
modify main()
int main(int argc, char * argv[]) {
@autoreleasepool {
if (isRunningTests()) {
return UIApplicationMain(argc, argv, nil, nil);
} else {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
}
如果测试的代码可以在桌面和移动设备上运行,那么您可以在不使用模拟器或将其托管到应用程序中的情况下运行它们。
问题在于您不能使用选定方案(桌面或iOS)来运行测试。
以下方法适用于我在Xcode6中:
File > New Target...