クラスと多数のユニット テストを作成しましたが、スレッド セーフにしませんでした。クラスをスレッド セーフにしたいのですが、それを証明して TDD を使用するために、リファクタリングを開始する前に失敗するユニット テストをいくつか作成したいと思います。
これを行う良い方法はありますか?
最初に思いついたのは、スレッドをいくつか作成し、それらすべてにクラスを安全でない方法で使用させることです。十分な数のスレッドでこれを十分な回数実行すると、必ず壊れることがわかります。
ベストアンサー1
そこで役立つ製品が 2 つあります。
どちらもコード内のデッドロックをチェックします (ユニット テスト経由)。また、Chess は競合状態もチェックすると思います。
両方のツールの使用は簡単です。簡単な単体テストを記述し、コードを数回実行して、コード内でデッドロックや競合状態が発生する可能性があるかどうかを確認します。
編集:Googleは、実行時(テスト中ではない)に競合状態をチェックするツールをリリースしました。スレッドレーステスト。
このツールは現在の実行のみを分析し、上記のツールのようにすべての可能性のあるシナリオを分析するわけではないため、すべての競合状態を見つけることはできませんが、競合状態が発生したときにそれを見つけるのに役立つ可能性があります。
アップデート:Typemock サイトには Racer へのリンクがなくなり、過去 4 年間更新されていません。プロジェクトが終了したと思われます。