使用 Xcode 的单元测试框架,应用程序代码是不是可以确定它是不是作为单元测试运行?
Posted
技术标签:
【中文标题】使用 Xcode 的单元测试框架,应用程序代码是不是可以确定它是不是作为单元测试运行?【英文标题】:Using Xcode's unit-testing framework, can application code determine whether it is being run as unit test?使用 Xcode 的单元测试框架,应用程序代码是否可以确定它是否作为单元测试运行? 【发布时间】:2013-04-15 18:26:38 【问题描述】:使用Xcode提供的内置测试框架,有没有办法让应用程序代码判断它是否正在由测试运行器运行,而不是作为应用程序运行?
换句话说,我想知道是否可以在应用程序代码中做这样的事情:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
// ...
if (IsUnitTestRunning())
[self useDefaultSettings];
[self showDefaultViewController];
else
[self restoreUserSettings];
[self restoreUserInterface];
// ...
我知道我可以创建一个新配置来定义一些预编译器宏并设置 Xcode 方案以在运行测试时构建和使用该配置,或者我可以在运行测试时将我的应用程序中的某种全局变量设置为 YES ,但我想知道 OCUnit 或 Xcode 中是否已经内置了一些东西来处理这个问题。
【问题讨论】:
【参考方案1】:在 Macintosh 上,有一种方法可以在调试期间从 Xcode 传递一些选项,使其变为“int main(argc, argv)
”。
我怀疑 ios 端也有类似的功能。您应该能够捕获通过“int main(argc, argv)
”传入的选项。
这里是您在 Xcode 方面进行修改的地方:
另一个选项可能是查看通过“didFinishLaunchingWithOptions:
”传入的选项字典,看看从 Xcode 启动与在设备或模拟器上启动它(不从 Xcode 启动)是否有什么不同。
【讨论】:
在main()
中捕获内容和/或设置环境变量确实适用于 iOS。另请参阅此处的最佳答案:***.com/questions/7274711/…。 (我找不到任何方法来设置 options
字典的内容,但这并不是我真正想做的。)以上是关于使用 Xcode 的单元测试框架,应用程序代码是不是可以确定它是不是作为单元测试运行?的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C 是不是有任何基于非 Xcode 的命令行单元测试工具?