3

JUnitまたはTestNGテストスイートを並列に実行するサポートがありますが、特定の構成(たとえばスレッド数の指定など)が必要です。最も重要なことは、スレッドセーフでないコードでの競合状態を防ぎません。JUnit/TestNGテストスイートを実行しているときに複数のコアを利用するための*本当の解決策はありますか?

スレッドセーフであるかどうかにかかわらず競合状態を防ぎながら、(同じプロセスまたは異なるプロセス内の異なるスレッドを使用して)個別のテストを異なるCPUコアに透過的に(つまり明示的な構成なしで)割り当てるツールはありますか?

このようなツールが存在しない場合、そのツールを実装する最良の方法は何でしょうか?

+0

いくつかのプロセスが競合状態を確実に防ぐ –

+0

もちろん、JUnit/TestNGテストスイート用のJavaベースのツールはありますか?このような並行テストツールが@ThreadSafeアノテーションを考慮に入れ、@ThreadSafeにアノテートされている場合にのみそのようなクラスのパラレルテストで実行することができればいいと思うならば –

+0

。私はそれが(それが可能かどうかわからない)非常に現実的な期待だとは思わない。コアごとに1つのJVMを生成し、各JVMでテストを分割するとどうなりますか?私はこれがどんなに速いのだろう... 1つのことは確かです:16コアCPUがテストスイートを実行し、CPUがアクティブな1つのコアのみを表示しているのを見ることは哀れです。( – Gugussee

答えて

0

通常のJUnit/TestNGツールと並行してテストを実行することを強くお勧めします。

理由は簡単です:競合状態でテストが失敗した場合、テストでは完全に完了しました - あなたが修正すべき設計、コードまたは並行性の前提条件のバグを発見しました。

複数のテストスレッド(グローバルに使用されている可変スタティックシングルトンオブジェクトなど)によって同時に使用されるスレッドセーフでないものは、おそらく設計上の欠陥です。スレッドセーフであるか、毎回それをローカルオブジェクトとして別々に初期化する。

+0

私はまったく同意していません... OPは特に非スレッドセーフなコードで問題を引き起こす可能性があることを明記しています。スレッドセーフではないと書かれている公式Java APIのJavaDocに関するすべての見解は?すべきだ彼らはすべてスレッドセーフであるようにすべてを書きますか?このように文書化されていれば、スレッドセーフではないコードを書くことは完全に有効であり、OPには完全に正当な懸念があります。 – Gugussee

+1

あなたはその点を逃したと思います。私は、マルチコアCPUを利用してテストを高速化したいだけです。私はスレッドセーフではないコードで競合状態を検出しようとしていません。 –

+1

あなたが書いたことを明確にするために*「テストが競合状態になって失敗した場合、テストは完璧な仕事をしました」*この文は、OPの質問の文脈で全く間違っています。コードが非スレッドセーフとして指定されている場合、テストは失敗すると**は失敗しました**。 – Gugussee

関連する問題