2017-10-13 13 views
0

私はユニットテストのためのCedarフレームワークを使用するより大きなプロジェクトに入っています。私はUITableViewを含むビューの単体テストを書いています。TableViewCellsをリフレッシュする方法

初期化:

subject = [[ControllerWithTableView alloc] initWithParams:params]; 
navigationController = [[UINavigationController alloc] initWithRootViewController:subject]; 

は、その後、私はいくつかのことを設定し、呼び出し:テストで

[subject: viewWillAppear:NO]; 

私はindexPathsで細胞を求めることができるなど、この背後にある 主なアイデアは、それということですUIを設定する時間がかかりすぎることなく実行されます。

[subject.view layoutIfNeeded]; 

を、それが働いた:私は追加する必要がありましたいくつかのテストで

しかし、現在のテストでは、実行時に呼び出されるのと同じメソッドで新しいtableViewRowを追加しています。しかし、私は新しい行とセルを作成するためにそれをテストするためにUITableViewをリロードするためのテストを得ることができません。

Hereを使用することが提案されています

#define tickRunLoop (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.01, false)) 

それは動作します。しかし時々それはクラッシュします。 1つのテストに失敗するだけでなく、単体テストを実行するプロセスがクラッシュします。他のすべてのテストは最後まで実行されません。私は不安定なコードを顧客のレポにプッシュすることができないので、オプションではありません。

私はXCode 8.3.3を使用しています。

強制的に更新するには他に何ができますか?

答えて

0

さて、それは私のせいでした。私は私のコードで

dispatch_async(dispatch_get_main_queue(), ^{ 
    // stuff 
}); 

を持っていた(。:Pまたは少なくともプロジェクトでそれは私のコードではありませんでした)。 したがって、テストはテストされたコードの実行よりも速かったです。常に非同期のものに注意してください!

すべての場合には、[subject.view layoutIfNeeded];は、今リフレッシュを強制するのに十分です。

関連する問題