Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 用于子视图控制器时,OCMock抛出EXEC\u BAD\u访问权限_Ios_Exc Bad Access_Ocmock_Xctest - Fatal编程技术网

Ios 用于子视图控制器时,OCMock抛出EXEC\u BAD\u访问权限

Ios 用于子视图控制器时,OCMock抛出EXEC\u BAD\u访问权限,ios,exc-bad-access,ocmock,xctest,Ios,Exc Bad Access,Ocmock,Xctest,我有一个包含以下代码的测试用例: #import <XCTest/XCTest.h> #import <OCMock/OCMock.h> @interface ChildViewControllerTests : XCTestCase @end @implementation ChildViewControllerTests -(void) testInitAddsPassedControllersAsChildViews { id mockTVC1 = [

我有一个包含以下代码的测试用例:

#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
#导入
#进口
@接口ChildViewControllerTests:xTestCase
@结束
@实现ChildViewControllerTests
-(无效)TestInitAddSpassedControllersAsChildView{
id mockTVC1=[OCMockObject niceMockForClass:[UITableViewController类]];
id mockTVC2=[OCMockObject niceMockForClass:[UITableViewController类]];
UIViewController*控制器=[[UIViewController alloc]init];
[controller addChildViewController:mockTVC2];//如果mockTVC2失败,但mockTVC1工作。
}
@结束
这是我能做到的最简单的事情。当我运行这个测试时,我得到一个EXEC_BAD_访问解除分配mockTVC2

如果我将mockTVC1添加到控制器中,它就可以正常工作

如果我交换mockTVC1和mockTVC2声明的顺序,它就可以正常工作

如果我交换mockTVC1和mockTVC2声明的顺序,并更改为添加mockTVC1,它将再次失败

因此,我的总结是,问题与第二个mock的声明有关,因为无论我如何排序声明,如果我尝试将声明的第二个mock添加到控制器中,则在取消分配时失败

你们中的一些人能做一个快速剪切粘贴,看看你们是否也能做到这一点

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


谢谢

我已经在我的机器上尝试了你的代码,但似乎在mockTVC1和mockTVC2(iOS 7模拟器)上都随机失败了。。。我最好尝试使用真正的表视图控制器(如果可以的话)。我有时会这样做,而不是模仿UITextField等UIKit类。感谢您的检查。我使用mock是因为我想检查客户控制器的功能。原始代码使用的是扩展UIViewController类的模拟。正如您所说,上面的示例最好使用真实的UIViewController,但我对使用OCMock时可能出现的问题感兴趣。您想测试什么?您可以通过使用部分模拟来实现这一点。