【问题标题】: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 中是否已经内置了一些东西来处理这个问题。

【问题讨论】:

    标签: xcode unit-testing ocunit


    【解决方案1】:

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

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

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

    另一个选项可能是查看通过“didFinishLaunchingWithOptions:”传入的选项字典,看看从 Xcode 启动与在设备或模拟器上启动它(不从 Xcode 启动)是否有什么不同。

    【讨论】:

    • 在main() 中捕获内容和/或设置环境变量确实适用于 iOS。另请参阅此处的最佳答案:stackoverflow.com/questions/7274711/…。 (我找不到任何方法来设置 options 字典的内容,但这并不是我真正想做的。)
    猜你喜欢
    • 1970-01-01
    • 2011-03-11
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2012-07-23
    相关资源
    最近更新 更多