首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用期望进行单元测试时的iOS8坏访问异常

使用期望进行单元测试时的iOS8坏访问异常
EN

Stack Overflow用户
提问于 2014-10-13 16:03:07
回答 1查看 642关注 0票数 4

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

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

我认为我在做的事情是:

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

如何确保我能够毫无例外地执行所有的单元测试?

//单元测试

代码语言:javascript
复制
-(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) {

    }];

}

//回调

代码语言:javascript
复制
-(void)refreshDatasource:(NSMutableArray*)datasource
{

   [self.expectation fulfill];
}
EN

回答 1

Stack Overflow用户

发布于 2015-10-19 09:24:13

我也遇到了同样的问题,导致每一个街区的呼叫都会发生故障。

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

然后,您必须更改main.m文件,以便在应用程序启动时设置正确的app委托:

代码语言:javascript
复制
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;
    } }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26344226

复制
相关文章

相似问题

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