JUnitマルチスレッドTest
2475 ワード
今日SimpleDateFormatをテストするときにマルチスレッドを使いますが、最初はJunitが理想的ではありません.Markちょっと.
Junitマルチスレッドテストは次のようになります.直接runではプログラムに異常はありませんが、debug時にSimpleDateFormatUtilはParseException異常で、Junitがマルチスレッドの下でTestにバグがあることを示します.【SimpleDateFormatUtilはDate解析ツールクラス】
@Test
public void threadTest() {
for (int i = 0; i < 3; i++) {
new SimpleThread().start();
}
}
private static class SimpleThread extends Thread {
@Override
public void run() {
try {
System.out.println(this.getName() + ":" + SimpleDateFormatUtil.parse("2015-12-23 15:00:00"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
マルチスレッド環境では、プログラムが終了する条件は、すべての非Daemonスレッドが正常に終了するか、あるスレッドバーがsystemを使用することである.exitメソッドにより、プロセスが強制的に終了します.
JunitCoreクラスのmain関数は次のとおりです.
public static transient void main(String args[]){
runMainAndExit(new RealSystem(), args);
}
private static transient void runMainAndExit(JUnitSystem system, String args[]){
Result result = (new JUnitCore()).runMain(system, args);
System.exit(result.wasSuccessful() ? 0 : 1);
}
明らかにSystemが呼び出された.exit関数は、スレッドが終了し、マルチスレッドが実行に間に合わないこともあります.
では、マルチスレッドでJunitテストを行うにはどうすればいいのでしょうか.【main関数でテストしてもOK】
@Test
public void threadTest() throws Throwable {
TestRunnable[] testRunnables = new TestRunnable[NUM_THREAD];
for (int i = 0; i testRunnables.length; i++) {
testRunnables[i] = new SimpleThread();
}
final MultiThreadedTestRunner multiThreadedTestRunner = new MultiThreadedTestRunner(testRunnables);
multiThreadedTestRunner.runTestRunnables();
}
private static class SimpleThread extends TestRunnable {
@Override
public void runTest() {
try {
System.out.println(this.toString() + ":" + SimpleDateFormatUtil.parse("2015-12-23 15:00:00"));
//System.out.println(this.toString());//すべてのスレッド名を正常に出力
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Junitマルチスレッドテストは次のようになります.直接runではプログラムに異常はありませんが、debug時にSimpleDateFormatUtilはParseException異常で、Junitがマルチスレッドの下でTestにバグがあることを示します.【SimpleDateFormatUtilはDate解析ツールクラス】
@Test
public void threadTest() {
for (int i = 0; i < 3; i++) {
new SimpleThread().start();
}
}
private static class SimpleThread extends Thread {
@Override
public void run() {
try {
System.out.println(this.getName() + ":" + SimpleDateFormatUtil.parse("2015-12-23 15:00:00"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
マルチスレッド環境では、プログラムが終了する条件は、すべての非Daemonスレッドが正常に終了するか、あるスレッドバーがsystemを使用することである.exitメソッドにより、プロセスが強制的に終了します.
JunitCoreクラスのmain関数は次のとおりです.
public static transient void main(String args[]){
runMainAndExit(new RealSystem(), args);
}
private static transient void runMainAndExit(JUnitSystem system, String args[]){
Result result = (new JUnitCore()).runMain(system, args);
System.exit(result.wasSuccessful() ? 0 : 1);
}
明らかにSystemが呼び出された.exit関数は、スレッドが終了し、マルチスレッドが実行に間に合わないこともあります.
では、マルチスレッドでJunitテストを行うにはどうすればいいのでしょうか.【main関数でテストしてもOK】
@Test
public void threadTest() throws Throwable {
TestRunnable[] testRunnables = new TestRunnable[NUM_THREAD];
for (int i = 0; i testRunnables.length; i++) {
testRunnables[i] = new SimpleThread();
}
final MultiThreadedTestRunner multiThreadedTestRunner = new MultiThreadedTestRunner(testRunnables);
multiThreadedTestRunner.runTestRunnables();
}
private static class SimpleThread extends TestRunnable {
@Override
public void runTest() {
try {
System.out.println(this.toString() + ":" + SimpleDateFormatUtil.parse("2015-12-23 15:00:00"));
//System.out.println(this.toString());//すべてのスレッド名を正常に出力
} catch (ParseException e) {
e.printStackTrace();
}
}
}
, ;
、 、 , 。
【 CSDN 】:csdn.zxiaofan.com
【GitHub】:github.zxiaofan.com
, 。 !
Life is all about choices!
!