ios: 模拟私有属性
ios: Mocking private properties
我想在我的 class 中模拟一个私有数组 属性。通过这样做,我已经在我的单元测试中提供了它。 (这是在我的单元测试文件中)
@interface MyViewController ()
@property (nonatomic, strong) NSArray myArray;
@end
假设我有一个名为 Person
的类型,这个数组应该包含人物对象。所以我在我的测试用例中做了以下事情
- (void)testBeneficiariesCount {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
id mockArray = OCMClassMock([NSArray class]);
self.myVC.myarray = mockArray;
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Person *p3 = [[Person alloc] init];
Person *p4 = [[Person alloc] init];
Person *p5 = [[Person alloc] init];
p1.name = @“Alice"; p2.name = @“James”; p3.name = @“Oscar"; p4.name = @“Harri”; p5.name = @“John”;
persons = [NSArray arrayWithObjects:p1,p2,p3,p4,p5,nil];
OCMStub([self.myVC myArray]).andReturn(persons);
XCTAssertEqual([self.myVC numberOfPersons], 5);
}
myVC 有一个名为 numberOfPersons
的方法,当我 运行 这个时,测试用例失败并抱怨 (0) is not equal to (5)
。这意味着我无法成功地模拟我的数组,因为我还尝试打印模拟数组但它什么也没有。
有人能告诉我我做错了什么吗?
您需要一个 mock 来存根,从它的外观来看,self.myVC
不是 mock。
我建议为视图控制器和之后的存根创建一个 partial mock。
MyViewController *partialMock = OCMPartialMock(self.myVC)
OCMStub([partialMock myArray]).andReturn(persons);
XCTAssertEqual([partialMock numberOfPersons], 5);
顺便说一句,如果您无论如何都在存根 myArray
getter.
,则不需要 mockArray
用法
我想在我的 class 中模拟一个私有数组 属性。通过这样做,我已经在我的单元测试中提供了它。 (这是在我的单元测试文件中)
@interface MyViewController ()
@property (nonatomic, strong) NSArray myArray;
@end
假设我有一个名为 Person
的类型,这个数组应该包含人物对象。所以我在我的测试用例中做了以下事情
- (void)testBeneficiariesCount {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
id mockArray = OCMClassMock([NSArray class]);
self.myVC.myarray = mockArray;
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Person *p3 = [[Person alloc] init];
Person *p4 = [[Person alloc] init];
Person *p5 = [[Person alloc] init];
p1.name = @“Alice"; p2.name = @“James”; p3.name = @“Oscar"; p4.name = @“Harri”; p5.name = @“John”;
persons = [NSArray arrayWithObjects:p1,p2,p3,p4,p5,nil];
OCMStub([self.myVC myArray]).andReturn(persons);
XCTAssertEqual([self.myVC numberOfPersons], 5);
}
myVC 有一个名为 numberOfPersons
的方法,当我 运行 这个时,测试用例失败并抱怨 (0) is not equal to (5)
。这意味着我无法成功地模拟我的数组,因为我还尝试打印模拟数组但它什么也没有。
有人能告诉我我做错了什么吗?
您需要一个 mock 来存根,从它的外观来看,self.myVC
不是 mock。
我建议为视图控制器和之后的存根创建一个 partial mock。
MyViewController *partialMock = OCMPartialMock(self.myVC)
OCMStub([partialMock myArray]).andReturn(persons);
XCTAssertEqual([partialMock numberOfPersons], 5);
顺便说一句,如果您无论如何都在存根 myArray
getter.
mockArray
用法