我有一系列使用XCTest框架编写的单元测试。这些最初是在iOS7上创建的,然后在iOS8设备上的xCode6中执行。测试按顺序执行,但随后我得到以下代码块的EXC_BAD_ACCESS(代码= 1,地址0xc)。当使用xcode中的“Test”命令执行测试时会发生这种情况。
如果我从测试左侧面板执行此测试单独,则正常通过或失败。
以下是我认为我正在做的事情:
如何确保我可以毫无例外地执行所有单元测试?
//单元测试
-(void)testNetworkDataSourceUpdate
{
self.expectation = [self expectationWithDescription:@"Getting network datasource"];
DataSource* dataSource = [DataSourceProvider datasourceWithRefreshDelegate:self];
XCTAssertNotNil(dataSource, @"Should have datasource immediately available");
//Bad access here
[self waitForExpectationsWithTimeout:10.0 handler:^(NSError *error) {
}];
}
//回调
-(void)refreshDatasource:(NSMutableArray*)datasource
{
[self.expectation fulfill];
}
答案 0 :(得分:0)
我遇到了同样的问题,导致每个块调用都崩溃了。
错误是由在后台运行的主应用程序引起的。您可以阻止我为您的测试目标添加自己的AppDelegate,这不会启动通常的应用程序流程。 因此,从测试目标中删除旧的AppDelegate,创建一个新的AppDelegate并将其添加到测试目标。
然后你必须更改你的main.m文件,在app start上设置正确的app delegate:
int main(int argc, char *argv[]) {
@autoreleasepool {
int returnValue;
BOOL inTests = NSClassFromString(@"XCTest") != nil;
if (inTests) {
//use a special empty delegate when we are inside the tests
returnValue = UIApplicationMain(argc, argv, nil, @"AppDelegateTest");
} else {
//use the normal delegate
returnValue = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
return returnValue;
} }