10

タイトルのように、私はこのような方法をテストしたいと思います:

public void startThread()
{
    new Thread()
    {
        public void run()
        {
            myLongProcess();
        }
    }.start();
}

編集:コメントから判断すると、スレッドが開始するかどうかをテストすることはあまり一般的ではないと思います。だから私は質問を調整する必要があります...私の要件が100%のコードカバレッジである場合、そのスレッドが開始するかどうかをテストする必要がありますか?もしそうなら、私は本当に外部フレームワークが必要ですか?

4

2 に答える 2

7

これは、Mockitoを使用してエレガントに行うことができます。クラスに名前が付けられていると仮定すると、メソッドがwithの呼び出しになったThreadLauncherことを確認できます。startThread()myLongProcess()

public void testStart() throws Exception {
    // creates a decorator spying on the method calls of the real instance
    ThreadLauncher launcher = Mockito.spy(new ThreadLauncher());

    launcher.startThread();
    Thread.sleep(500);

    // verifies the myLongProcess() method was called
    Mockito.verify(launcher).myLongProcess();
}
于 2012-06-18T10:08:54.380 に答える
1

100%のカバレッジが必要な場合はstartThread、スレッドを開始する呼び出しを行う必要があります。スレッドが開始されたことを確認することをお勧めします(何かmyLongProcessが起こっていることを確認してから、スレッドをクリーンアップします。その後、単体テストmyLongProcessから直接そのメソッドを呼び出して、残りのテストを実行します。

于 2012-06-18T13:31:10.880 に答える