我想模拟一个在我的类中是私有属性的数组。通过这样做,我已经在我的单元测试中提供了它。 (这是在我的单元测试文件中)
@interface MyViewController ()
@property (nonatomic, strong) NSArray myArray;
@end
假设我有一个名为Person
的类型,这个数组应该包含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)
。这意味着我无法成功模拟我的数组,因为我也试图打印模拟数组,但它没有任何内容。
有些人可以告诉我这里我做错了什么。
答案 0 :(得分:1)
你需要一个模拟来存根,并且从它的外观来看,self.myVC
不是模拟。
我建议之后为视图控制器和存根创建partial mock。
MyViewController *partialMock = OCMPartialMock(self.myVC)
OCMStub([partialMock myArray]).andReturn(persons);
XCTAssertEqual([partialMock numberOfPersons], 5);
顺便说一句,如果您无论是在mockArray
获取者,那么您都不需要使用myArray
。