日々精進

新しく学んだことを書き留めていきます

GHUnitでテストを実行するとEXC_BAD_ACCESSが発生する

しかも毎回発生する箇所が違うとか、発生しないことがあったりしてかなり厄介だった。
原因は詳しく追ってないけど多分以下。
・GHUnitはデフォルトでは別スレッドでテストを実行している
・GHVerifyViewでViewのテストをするときにUIGraphicsGetImageFromCurrentImageContextでViewの画像を生成する。
 UIGraphicsGetImageFromCurrentImageContextはメインスレッドで実行しなければならない。
・画像の生成とViewの検証が異なるスレッドで行われているので画像が生成される前にViewの検証をしようとしてEXC_BAD_ACCESSが発生する。


解決策はGHViewTestCaseのサブクラスで以下を実装し、メインスレッドでテストさせること。

- (BOOL)shouldRunOnMainThread { 
  return YES;
}



参考:GHTestCase Class Reference
 objective c - UIGraphicsGetImageFromCurrentImageContext memory leak / pdf previews - Stack Overflow