如何在异步线程方法中测试它被调用?

时间:2015-02-10 13:57:37

标签: java asynchronous junit mockito powermock

我有以下课程:

public class ForTest {
    public void methodToTest(Thread thread){
        thread.start();
    }
}
class MyThread extends Thread{
    FooClass fooClass;
    public MyThread(FooClass fooClass){
        this.fooClass = fooClass;
    }
    @Override
    public void run() {
        fooClass.bar();
    }
}
class FooClass{
    public void bar(){}
}

我想测试方法methodToTest 我想传递MyThread的实例作为上述方法的参数。

因此,我想验证是否调用了方法bar

你能帮我用Mockito或Powermock写它吗?

1 个答案:

答案 0 :(得分:0)

要考虑的事情:

  1. 因为您使用外部线程,需要某种等待/阻止
  2. 如果线程代码更复杂,并且因为我们需要等待线程完成执行(通常不是你的情况),那么就需要使用超时功能。
  3. 您根本不必使用模拟,例如FooClass.bar()方法可以设置/修改一个字段,然后检查该字段是否有更改的值。

    @Test
    public void testSomeMethod() throws InterruptedException {
        FooClass fooClassMock = Mockito.mock(FooClass.class);
        Thread thread = new MyThread(fooClassMock);
    
        new ForTest().methodToTest(thread);
    
        thread.join();
    
        Mockito.verify(fooClassMock).bar();
    }