Hen*_*Lee 5 java junit multithreading unit-testing
我有一个这样的类实现Runnable
public Processor implements Runnable{
public void run() {
while (true) {
//some code
sendRequest(object);
}
}
}
public void sendRequest(Object, object){
// do something to send the event
}
}
Run Code Online (Sandbox Code Playgroud)
并在其他预紧课上。我用
Processor processor = new Processor();
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(processor)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何对单元调用sendRequest方法进行调用?
将关注点分开:Runnable和关联的逻辑。
此外,它将使您的代码模式可测试。
你可以提取sendRequest()的Foo类的Processor类依赖于。然后,您仅需Foo在测试中模拟此类并验证是否sendRequest()已调用该方法。
例如 :
public Processor implements Runnable{
private Foo foo;
public Processor(Foo foo){
this.foo = foo;
}
public void run() {
while (true) {
//some code
foo.sendRequest(object);
}
}
}
Run Code Online (Sandbox Code Playgroud)
和测试:
@Mock
Foo fooMock;
@Test
public void run() {
Processor processor = new Processor(fooMock);
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(processor);
executor.awaitTermination(someTime, TimeUnit.SECONDS);
Mockito.verify(fooMock).sendRequest(...);
}
Run Code Online (Sandbox Code Playgroud)