3

同じためにJUnitをテストInterruptedExceptionして作成する必要があります。ExecutionException

これについて私にアドバイスしてください。スレッドを中断してシナリオを複製するにはどうすればよいですか。はpopulateDataForm新しいスレッドを開始し、これを先物リストに追加します。

ここに私のサンプルコードがあります:

class MyTest{
    public populateData(){

    Collection<Future<?>> futures = new LinkedList<Future<?>>();
    DataSet ds = Helper.populateDataForm(employee, futures);

    waitForTaskCompletion(futures);
    }


    private waitForTaskCompletion(futures){
    for (Future<?> future:futures) {
        try {
               future.get();
            } catch (InterruptedException e) {
               throw new CustomExcpetion("Message1", e)
            } catch (ExecutionException e) {
               throw new CustomExcpetion("Message2", e)
        }

    }
}
4

1 に答える 1

1

次のようにメソッドを継承しMyTestてオーバーロードできます。populateData()

public void populateData() {

    ExecutorService executorService = Executors.newSingleThreadExecutor();
    Callable<String> calls = new Callable<String>() {

        @Override
        public String call() throws Exception {
            for (;;){
                Thread.sleep(100);
                // You call interrupt here, which causes Future.get() interrupt
                Thread.currentThread().interrupt();
                if (1 > 2) break;
            }
            return null;
        }
    };
    final Future<String> future = executorService.submit(calls);

    waitForTaskCompletion(future);
    executorService.shutdown();
}

割り込みの代わりにExecutionExceptionスローをテストするには、次のようにします。RuntimeException

if (1==1)throw new RuntimeException();
于 2013-06-18T21:24:50.777 に答える