1

以前、スレッド プールから単体テストを失敗させる方法を尋ねました。

@Test
public void foo() throws Exception {
    ScheduledThreadPoolExecutor stpe = new ScheduledThreadPoolExecutor(1);
    stpe.submit(new Runnable() {
        @Override
        public void run() {
             // does not make this unit test fail :(
             Assert.AssertEquals(1, 2);
       }
    });
}

私が受け入れた解決策は、返されたものをブロックしてFuture取得することでした。しかし、私の実際の設定では、スレッドプールもサブミット コールも所有していません。これは、最終的に MINA から発信されるコールバックです。

私が持っている最良のアイデアについては、グローバルなデフォルトの例外ハンドラーをいじることですが、非常にぎこちないようです。

それが重要な場合、Maven確実に。

4

1 に答える 1

0

私は同じ質問に答えます。私の質問は次のとおりです: TestNG Make assert in multithread way (not run in multithread)

ここに私の解決策があります:

Javaはメソッドのパラメータを参照渡しするので、ResultWrapperクラスを書いた

public class ResultWrapper {

    boolean result;

    public boolean getResult()
    {
        return result;
    }

    public void setResult(boolean result)
    {
        this.result = result;
    }
}

アサートする代わりにpublic void run()、結果を ResultWrapper に入れます。resultWrapper.setResult(actual == expectedAssert);

(ResultWrapper は Constructor で Runnable クラスを呼び出すクラスに渡されます)

そして、次のようにテストメソッドで outSide をアサートします。

@テスト

public void assign_assign_release_release() throws ClientProtocolException, IOException, InterruptedException{

        assignUntilSuccess();
        releaseUntilSuccessAndExpect(1);
        Assert.assertTrue(resultWrapper.getResult());
    }

これが役立つことを願っています。

于 2013-05-13T06:54:22.323 に答える