どのようにマルチスレッドのテストを書けばいいのかがよく理解できていません。
スレッドセーフ性を担保するようなテストはどのようなものになるでしょうか。
ソフトウェアテストによるスレッドセーフ性の担保は、非常に困難もしくは事実上不可能と考えます。マルチスレッド・プログラムは本質的に非同期システムであり、あるテストが成功(PASS)したからといって「期待通り動くこともある」以上のことは何も言えません。まったく同じテストをもう一度実行したら、次回は失敗(FAIL)するかもしれませんし、運良く成功(PASS)するかもしれません。
もちろん、通常のシングルスレッド・プログラムであっても、ソフトウェアテストによる100%の信頼性保証は不可能であり、多数の試験ケースを用意することで「ソフトウェア品質の確からしさ」を担保しています。しかしマルチスレッド・プログラムの場合は複数スレッドの非決定的(=再現性のない)な相互作用が生じるため、起こりうる動作パターンが組み合わせ爆発を起こします。例えば10命令程度の2スレッド処理だけを考えた場合でも、起こりうる命令の実行順序並びを列挙すると、絶望的なパターン数になるはずです。
よそのQAサイトからの引用(英語)ですが、様々な意見も参考になるかと思います。
How should I unit test threaded code? - Stack Overflow