0

我有一个带有以下代码的 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,它再次取消分配失败。

所以我的总结是,问题与第二个模拟的声明有关,因为无论我如何订购声明,如果我尝试将第二个声明的模拟添加到控制器,那么它在取消分配时会失败。

你们中的一些人可以做一个快速的剪切粘贴,看看你是否也会发生这种情况吗?

我想确认这不仅仅是我的设置。

谢谢

4

0 回答 0