2016-07-12 10 views
0

Junitテストを並行して実行します。私は次の問題に遭遇していますParallelComputerでJunitテストを実行しているときのコンソール出力

これらのテストは他のチームによって開発され、約2500のテストスイートがあります。テストとテストフレームワークには静的変数があります。彼らは一度に1つのスイートを実行するときにうまく動作するように書かれています。これらのテストスイートスイートを構築して実行すると、実行が完了しません。

この問題を回避するために、別のクラスローダー(一度にテストのグループ)によってテストスイートをロードする独自のテストランナーがいます。私はそれを複数のスレッドで行い、これらのスレッドのそれぞれからJunitCoreのrunメソッドを呼び出します。これは正常に動作します。このアプローチの問題は、コンソール出力が混在していることです。

私はテストスイートのコンソール出力を分離してファイルにリダイレクトできるように、この問題の解決策を探しています。

ここに私が検討している潜在的な解決策があります。別のクラスローダーでクラスをロードし、それらのクラスの "クラス"オブジェクトの配列をParallelComputerというインスタンスのJunitCore runClassesに渡すことができました。

誰かがParallelComputerを使用してテストスイートを実行しようとしましたか?コンソール出力はどのように処理されますか?

+0

見てみましたか?各テストスレッドに異なる出力ファイルを提供できますか?テストを並行して実行することは何を意味しますが、何とか出力を単一のコンソールにシリアライズ/分離しますか?あなたが尋ねていることははっきりしていないし、あなたはほとんど十分な文脈や研究の証拠を提供していない。 –

+0

私はまだ試していません。テストとフレームワークはstdoutに出力されます(System.out.printlnを直接使用している場合もあれば、ある種のロガーを使用している場合もあります)。それがどのように行われたかにかかわらず、テストが実行されるときにコンソール上に多くの情報が表示されます。スレッドでテストを実行しようとすると、そのすべての出力が混在します。スレッドごとにコンソール出力を分けたいParallelComputerはテストを並行して実行することになっています。しかし、私はどのようにコンソールの出力が処理されるのか分からない。私の質問は誰でもそれを試してみたのですが、もしそうなら、System.out.printlnの出力はどのように処理されましたか?これが明確になることを願っています。 – user3274614

答えて

0

ParallelComputerを使用してJUnitテストを実行しようとすると、std outがすべて混在しています。私はそれを期待していましたが、私は小さなプログラムで試しました。

私のプログラムでは、出力は私が標準出力を分離する方法を探しています。この

a2 
a1 
a2 
a1 
a2 
a1 
a1 
a2 
a1 
a2 
b1 
b2 
b1 
b2 
b1 
b2 
b1 
b2 
b1 
b2 

のようなものです

import org.junit.runner.*; 
import org.junit.*; 
import org.junit.experimental.*; 

public class ParallelComputerTest { 

public static void main(String[] args) {  
Class[] cls={ParallelTest1.class,ParallelTest2.class }; 

//Parallel among classes 
JUnitCore.runClasses(ParallelComputer.classes(), cls);  
} 

public static class ParallelTest1{ 
@Test public void a1(){ 
    int count = 0; 
    while(count < 5) { 
    System.out.println("a1"); 
    count++; 
    try { 
     Thread.sleep(2000); 
    } catch(Exception e) { 
    } 
    } 

} 
@Test public void b1(){ 
    int count = 0; 
    while(count < 5) { 
    System.out.println("b1"); 
    count++; 
    try { 
     Thread.sleep(2000); 
    } catch(Exception e) { 
    } 
    } 
} 
} 
public static class ParallelTest2{ 
@Test public void a(){ 
    int count = 0; 
    while(count < 5) { 
    System.out.println("a2"); 
    count++; 
    try { 
     Thread.sleep(2000); 
    } catch(Exception e) { 
    } 
    } 
} 
@Test public void b(){ 
    int count = 0; 
    while(count < 5) { 
    System.out.println("b2"); 
    count++; 
    try { 
     Thread.sleep(2000); 
    } catch(Exception e) { 
    } 
    } 
} 
} 
} 

を下回っています。

関連する問題