首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检测单元测试是否在运行时在Xcode中运行的正确方法是什么?

检测单元测试是否在运行时在Xcode中运行的正确方法是什么?
EN

Stack Overflow用户
提问于 2014-07-11 08:45:21
回答 5查看 10.7K关注 0票数 20

当我运行单元测试时,我想跳过一些代码(例如,我不想运行[[UIApplication sharedApplication] openURL:..] )。我正在寻找一个运行时检查,如果我当前正在运行单元测试。

我知道我见过检查Objective-C运行时的代码,如果单元测试正在运行,但再也找不到它。

EN

回答 5

Stack Overflow用户

发布于 2014-07-11 09:22:29

您可以从google-toolbox-for-mac使用this method

代码语言:javascript
复制
// Returns YES if we are currently being unittested.
+ (BOOL)areWeBeingUnitTested {
  BOOL answer = NO;
  Class testProbeClass;
#if GTM_USING_XCTEST // you may need to change this to reflect which framework are you using
  testProbeClass = NSClassFromString(@"XCTestProbe");
#else
  testProbeClass = NSClassFromString(@"SenTestProbe");
#endif
  if (testProbeClass != Nil) {
    // Doing this little dance so we don't actually have to link
    // SenTestingKit in
    SEL selector = NSSelectorFromString(@"isTesting");
    NSMethodSignature *sig = [testProbeClass methodSignatureForSelector:selector];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig];
    [invocation setSelector:selector];
    [invocation invokeWithTarget:testProbeClass];
    [invocation getReturnValue:&answer];
  }
  return answer;
}

使用NSClassFromStringNSInvocation原因是允许在不链接到xctest或ocunit的情况下编译代码

票数 17
EN

Stack Overflow用户

发布于 2017-09-12 05:07:39

我不确定这会持续多久,但它现在适用于我的9.0 beta 6 (9M214v)版本。

代码语言:javascript
复制
let isTesting = { () -> Bool in
    if let _ = ProcessInfo.processInfo.environment["XCTestConfigurationFilePath"] {
        return true
    } else if let testingEnv = ProcessInfo.processInfo.environment["DYLD_INSERT_LIBRARIES"] {
        return testingEnv.contains("libXCTTargetBootstrapInject.dylib")
    } else {
        return false
    }
}()

不需要更改构建环境或方案。

根据您运行的是单个测试用例还是整个测试套件,似乎有两个不同的环境变量在起作用。此外,该变量的值也会根据您是在模拟器中运行还是在真实设备上运行而有所不同。

票数 8
EN

Stack Overflow用户

发布于 2016-03-25 04:26:05

我认为你可以像这样检查Xcode7.3

代码语言:javascript
复制
-(BOOL) isRunningUnitTests
{
    NSDictionary* environment = [ [ NSProcessInfo processInfo ] environment ];
    NSString* theTestConfigPath = environment[ @"XCTestConfigurationFilePath" ];
    return theTestConfigPath != nil;
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24688512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档