我有一个带有以下代码的 XCTest 案例:
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
@interface ChildViewControllerTests : XCTestCase
@end
@implementation ChildViewControllerTests
-(void) testInitAddsPassedControllersAsChildViews {
id mockTVC1 = [OCMockObject niceMockForClass:[UITableViewController class]];
id mockTVC2 = [OCMockObject niceMockForClass:[UITableViewController class]];
UIViewController *controller = [[UIViewController alloc] init];
[controller addChildViewController:mockTVC2]; // Fails if mockTVC2, but mockTVC1 works.
}
@end
这就像我能做到的一样简单。当我运行这个测试时,我得到一个 EXEC_BAD_ACCESS 释放 mockTVC2。
如果我将 mockTVC1 添加到控制器中,它就可以正常工作。
如果我交换 mockTVC1 和 mockTVC2 声明的顺序,它工作得很好。
如果我交换 mockTVC1 和 mockTVC2 声明的顺序并更改为添加 mockTVC1,它再次取消分配失败。
所以我的总结是,问题与第二个模拟的声明有关,因为无论我如何订购声明,如果我尝试将第二个声明的模拟添加到控制器,那么它在取消分配时会失败。
你们中的一些人可以做一个快速的剪切粘贴,看看你是否也会发生这种情况吗?
我想确认这不仅仅是我的设置。
谢谢