2

現在、Java で R 呼び出しを使用できるようにする Java 用のインターフェイスをテストしています。したがって、プロセスもカプセル化する接続が必要です。
ここで、JUnit がこれらの単体テストをどのように処理するかを知る必要があります。テストごとに1回、新しい接続(内部的にはプロセスです)を開始するために、JUnit4@Beforeと注釈を使用しています。 「JUnit の処理方法」とは、次のことを意味します。@After

  • すべてのテストは独自のスレッドで実行されますか? (これはおそらく問題を引き起こす可能性があります)
  • それらのテストは順番に実行されていますか?
  • 特定の順序がありますか (それほど重要ではありませんが、知っておくと便利です)

私の懸念は、実際の環境で (文書化されているように) 適切に使用された場合、これらのテストが存在しない問題を引き起こす可能性があることです。

4

4 に答える 4

2

テストは順次実行されます。この事実に頼るべきではありません。これは、純粋な単体テストを作成しておらず、(テストに関して) アンチパターンを作成していることを示しているためです。After各テストは、初期化以外の外部依存関係のない独自の個別の作業である必要がありBeforeます。各テストは独自のスレッドで実行されると思います。これは、テスト スイートが純粋な単体テストではないことを思い起こさせます。

私の懸念は、実際の環境で (文書化されているように) 適切に使用された場合、これらのテストが存在しない問題を引き起こす可能性があることです。

単体テストでは、関数の 1 つの小さな部分 (通常は 1 つの可能な論理分岐)のみを検証します。システム統合をテストしたい場合は、統合テストと呼ばれるものを実行する必要があります。さらに、マルチスレッド テストを行う場合は、以下を強くお勧めします: マルチスレッド TC

于 2012-12-17T21:13:49.703 に答える
1

特に明記しない限り、JUnit はユニット テストを実行するのに好きな数のスレッドを自由に使用できると思います。これを単一のスレッドに制限できます。どのテストをいつ実行するかは任意です。理論的には、異なるスレッドから実行された場合に非決定性の問題が発生しないように、テストは適切にスレッドセーフである必要があります。

于 2012-12-17T21:13:52.103 に答える
1
  • すべてのテストは独自のスレッドで実行されますか? (おそらく問題を引き起こす可能性があります) -すべてのテストに対して 1 つのスレッド
  • それらのテストは順番に実行されていますか? -はい
  • それらには特定の順序がありますか (それほど重要ではありませんが、知っておくとよいでしょう) -いいえ、クラス内の @Test メソッドの処理順序を事前に伝えることは基本的に不可能です。しかし、@Rules を使用すると、現在のテストの番号をシーケンスで読み取ることができます。

  • もちろん、1 つのクラスでさまざまなテストについて話しています。

于 2012-12-17T22:47:18.423 に答える
1

各テスト クラス:

  1. @BeforeClass および/または @ClassRule アノテーションを呼び出します。
  2. 各テスト (@Test) について:
    1. クラスのインスタンスを作成する
    2. @Before や @Rule アノテーションを呼び出す
    3. テストメソッドを呼び出す
    4. @After および/または @Rule アノテーションを呼び出す
  3. @AfterClass または @ClassRule アノテーションを呼び出します。

通常、すべてが同じスレッドから機能しますが、一部のルール (タイムアウト) がスレッドをフォークするため、これに依存しないでください。また、テストを並行して実行することもできます。

于 2012-12-17T23:31:46.667 に答える