0

次のコードを含む XCTest ケースがあります。

#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

それは私がそれを作ることができるのと同じくらい簡単です。このテストを実行すると、mockTVC2 の割り当てを解除する EXEC_BAD_ACCESS が表示されます。

代わりに、mockTVC1 をコントローラーに追加すると、問題なく動作します。

mockTVC1 宣言と mockTVC2 宣言の順序を入れ替えると、問題なく動作します。

mockTVC1 宣言と mockTVC2 宣言の順序を入れ替えて、mockTVC1 を追加するように変更すると、割り当て解除に再び失敗します。

したがって、私の要約は、宣言の順序に関係なく、2番目に宣言されたモックをコントローラーに追加しようとすると、割り当て解除時に失敗するため、問題は2番目のモックの宣言に関係しているということです。

カットアンドペーストを簡単に行って、これが発生するかどうかを確認できますか?

それが私の設定だけではないことを確認したいと思います。

ありがとう

4

0 に答える 0