使用Xcode的单元测试框架,应用程序代码可以确定它是否作为单元测试运行吗?

时间:2013-04-15 18:26:39

标签: xcode unit-testing ocunit

使用Xcode提供的内置测试框架,是否有任何方法可以让应用程序代码确定它是否由测试运行程序运行,而不是作为应用程序运行?

换句话说,我想知道是否可以在应用程序代码中执行类似的操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // ...

    if (IsUnitTestRunning()) {
        [self useDefaultSettings];
        [self showDefaultViewController];
    }
    else {
        [self restoreUserSettings];
        [self restoreUserInterface];
    }

    // ...
}

我知道我可以创建一个新的配置来定义一些预编译器宏并设置Xcode方案来构建并在运行测试时使用该配置,或者我可以在运行测试时将我的应用程序中的某种全局变量设置为YES ,但我想知道是否已经在OCUnit或Xcode中内置了一些东西来处理这个问题。

1 个答案:

答案 0 :(得分:1)

在Macintosh上,有一种方法可以在调试期间从Xcode传递一些选项,使其成为“int main(argc, argv)”。

我怀疑在iOS方面有类似的功能。您应该能够通过“int main(argc, argv)”捕获传入的选项。

这是你在Xcode方面进行修改的地方:

Modify Your Xcode scheme a bit

另一种选择可能是查看通过“didFinishLaunchingWithOptions:”传入的选项字典,看看是否有关于从Xcode启动而不是在设备或模拟器上启动它的不同之处(不是从Xcode启动) )。