2016-08-25 3 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に次のようにやっていることは、私はこれを実行すると、テストケースが(0) is not equal to (5)ことを訴えて失敗している、numberOfPersonsという名前のメソッドを持っています。これは、私がうまく配列を模倣することができなかったことを意味します。私も模倣された配列を印刷しようとするので、何もありません。

ここで間違っていることを教えてください。

答えて

1

スタブにモックが必要ですが、その外観はself.myVCではありません。

ビューコントローラとスタブの後にpartial mockを作成することをおすすめします。とにかくmyArrayゲッターをスタブされている場合

MyViewController *partialMock = OCMPartialMock(self.myVC) 

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

XCTAssertEqual([partialMock numberOfPersons], 5); 

ところで、あなたはmockArray使用を必要としません。