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();
            }
        }
    }
 , ;
 、 、 , 。

【 CSDN 】:csdn.zxiaofan.com
【GitHub】:github.zxiaofan.com

 , 。 !
Life is all about choices! 
 !