私はEXC_BAD_ACCESSの問題を解決する方法を知っていますが、その単体テスト方法はわかりません。単にクラッシュするのではなく、コードでEXC_BAD_ACCESSをキャプチャする方法はありますか?ここでEXC_BAD_ACCESSのユニットテストはどのようにして行いますか?
は私が尋ねる理由です:私はこのように、頻繁にブロックを使用してライブラリを書かれている:
doSomething:
の私の実装では
- (void)doSomething:(void (^)())myBlock;
私はこのように、最終的にブロックを実行するつもりです:
myBlock();
呼び出し側は、それがEXC_BAD_ACCESS
でクラッシュします、ブロックにnilを渡し、その解決策は次のように、ブロックが存在することを確認する場合:
if (myBlock) {
myBlock();
}
このnilチェックはかなり忘れやすいので、クラッシュが発生したときに失敗する単体テストを書く方法をお勧めします。クラッシュはテスト失敗と見なすことができると思いますが、クラッシュではなく素晴らしい失敗メッセージを表示するためにテストを実行しようとしている人にとっては、より良いと思います。何か案は?これは、実行を継続方法の前に満たされなければならない前提条件を強制
NSAssert(myBlock != nil, @"myBlock must not be nil")
:
これは非常に興味深いです。最初の試みでは、私が何をしてもテストに失敗しますが、このプロジェクトはCocoa Touchの静的ライブラリの対象となり、テストを実行するとiPhone Simulatorが起動します。私はfork()がそこで動作するとは思わないので、Mac/Cocoaのターゲットとしてこれを試してみて、何が起こるか見てみましょう。ありがとう! – greenisus
ええ、ええ、iOS上で 'fork()'が利用できるのかどうか分かりません。これを完全に正しく機能させるのが難しいです。私が何かを明らかにするなら、私は更新します。 –