Objective c 延迟XCTest中所有单元测试的执行

Objective c 延迟XCTest中所有单元测试的执行,objective-c,unit-testing,testing,xctest,Objective C,Unit Testing,Testing,Xctest,我需要我的单元测试来等待我们的子系统初始化,这通常需要几秒钟。为了等待,我可以在测试中执行以下操作 - (void)testReverseActionWithOffset { XCTestExpectation *expectation = [self expectationWithDescription:@"High Expectations"]; // Wait for proper initialization of Realm and CrimsonObject sys

我需要我的单元测试来等待我们的子系统初始化,这通常需要几秒钟。为了等待,我可以在测试中执行以下操作

- (void)testReverseActionWithOffset
{
    XCTestExpectation *expectation = [self expectationWithDescription:@"High Expectations"];

    // Wait for proper initialization of Realm and CrimsonObject system...
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
问题是,使用这种技术,我必须在每一种测试方法中进行等待。这导致每次测试之间有两秒钟的延迟,即使在系统启动后也是如此。因为测试方法是以不确定的顺序运行的,所以我不能把延迟放在一个方法中。在XCTest下处理此问题的正确方法是什么

因为测试方法是以不确定的顺序运行的,所以我不能把延迟放在一个方法中

每次测试之间需要做的任何事情都可以在或中完成

如果需要对每个
XCTestCase
执行一次操作,可以使用类方法或。第一个在运行任何测试之前运行,第二个在所有测试之后运行

通过旋转运行循环,您可以在这些方法中的任何一种中执行非阻塞等待:

+ (void)setUp
{
    while( /* subsystems not ready */ ){
        [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
    }
}

问题是,就我在测试中所见,没有办法延迟使用这些方法。期望似乎没有效果,如果您完全执行sleep(),它会延迟主线程,因此我的加载不会初始化(这是我首先等待的)。如果你知道解决这个问题的方法,请告诉我。谢谢要执行非阻塞等待,您可以旋转运行循环,直到满足您的条件:
while(/*subsystem not ready*/){[[nsrunlop main runloop]rununteldate:[NSDate dateWithTimeIntervalSinceNow:0.5]];}
我应该注意,我忍不住觉得我在回答您的问题,而牺牲了解决您的问题。我不太确定这里的正确答案是什么。我不知道你可以从线程内继续使用主线程!这很有效。你能把这个加到答案里吗?我接受(void)根据该请求设置{while(){[[nsrunlop main runloop]rununteldate:[NSDate datewithtimeintervalncenconow:.1f]];}}}nm!不知道我有权编辑其他人的答案。谢谢你的帮助!很高兴我能帮忙。关于代码的一个小提示:
NSTimeInterval
是一个
double
,而不是
float
。在这种情况下,
f
后缀不正确。