2016-08-25 161 views
0

我想模擬一個數組,這是我的班級內的私有財產。我已經通過這樣做了我的單元測試。 (這是我的單元測試文件中)ios:嘲弄私有財產

@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)。這意味着我不能成功地模擬我的數組,因爲我也試圖打印模擬數組,並且它沒有任何內容。

有些人可以告訴我在這裏做錯了什麼。

回答

1

你需要一個模擬存根,並從它看起來像,self.myVC是不是一個模擬。

我建議創建一個partial mock爲視圖控制器和存根之後。

MyViewController *partialMock = OCMPartialMock(self.myVC) 

OCMStub([partialMock myArray]).andReturn(persons); 

XCTAssertEqual([partialMock numberOfPersons], 5); 

BTW,你不需要mockArray使用,如果你無論如何要捻熄myArray吸氣。