gpt4 book ai didi

objective-c - 期望进行单元测试时iOS8访问错误异常

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:06 25 4
gpt4 key购买 nike

我有一系列使用 XCTest 框架编写的单元测试。这些最初是在 iOS7 上创建的,然后在 iOS8 设备上的 xCode6 中执行。测试按顺序执行,但随后我得到以下代码块的 EXC_BAD_ACCESS(代码= 1,地址 0xc)。当使用 xcode 中的“测试”命令执行测试时会发生这种情况。

如果我从测试左侧面板单独执行此测试,它正常通过或失败。

这是我认为我正在做的事情:

  • 设定期望
  • 获取数据源(旧的立即返回)
  • 从网络资源异步更新数据源。
  • 测试用例收到委托(delegate)回调通知并满足预期

我如何确保我可以毫无异常(exception)地执行我的所有单元测试?

//单元测试

-(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];
}

最佳答案

我遇到了同样的问题,导致每次 block 调用都崩溃。

错误是由在后台运行的主应用程序引起的。您可以通过为您的测试目标添加您自己的 AppDelegate 来防止这种情况,这不会启动通常的应用程序流程。因此,从测试目标中删除旧的 AppDelegate,创建一个新的并将其添加到您的测试目标。

然后您必须更改您的 main.m 文件以在应用程序启动时设置正确的应用程序委托(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;
} }

关于objective-c - 期望进行单元测试时iOS8访问错误异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26344226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com