我知道如何解决EXC_BAD_ACCESS问题,但我不确定如何对它进行单元测试.有没有办法在代码中捕获EXC_BAD_ACCESS而不是简单地崩溃?
这就是我问的原因:我编写了一个大量使用块的库,如下所示:
- (void)doSomething:(void (^)())myBlock;
Run Code Online (Sandbox Code Playgroud)
在我的实现中,doSomething:我将最终运行块,如下所示:
myBlock();
Run Code Online (Sandbox Code Playgroud)
如果调用者为块传递nil,那么它将崩溃EXC_BAD_ACCESS,因此解决方案是检查该块是否存在,如下所示:
if (myBlock) {
myBlock();
}
Run Code Online (Sandbox Code Playgroud)
这个零检查很容易忘记,所以我想要一种方法来编写在崩溃发生时失败的单元测试.我认为崩溃可能被视为测试失败,但我认为对于其他试图运行测试以查看错误消息而不是崩溃的人来说会更好.有任何想法吗?
假设我使用了Core Data模型AFIncrementalStore,并且我有多个REST API端点用于检索该模型的对象列表.我可以覆盖-requestForFetchRequest:withContext:在AFHTTPClient像这样:
- (NSURLRequest *)requestForFetchRequest:(NSFetchRequest *)fetchRequest
withContext:(NSManagedObjectContext *)context {
NSMutableURLRequest *mutableURLRequest = nil;
if ([fetchRequest.entityName isEqualToString:@"Post"]) {
mutableURLRequest = [self requestWithMethod:@"GET" path:@"/posts/foo" parameters:nil];
}
return mutableURLRequest;
}
Run Code Online (Sandbox Code Playgroud)
在这个片段中,我检索Post对象/posts/foo,但我还需要从中检索另一个集合/posts/bar.
我怎样才能做到这一点?我看到的唯一解决方案是制作两个模型:一个用于foo和一个用于bar,但重复自己是蹩脚的,并且可能有更多的API端点Post为我提供了我需要支持的对象.我还缺少一些其他方法吗?