我正在使用Mockito来模拟SUT使用的类。我想检查在某个线程(主)上没有调用该模拟类的某个方法。
以下是一个例子:
public class ToBeMocked {
public invokeMeInBackground() {
// do stuff
}
}
public class SUT {
new Thread(new Runnable() {
@Override
public void run() {
toBeMocked.invokeMeInBackground();
}
}).start();
}
我知道我可以通过verify()
检查它是否被调用了多少次答案 0 :(得分:0)
不是你想要的解决方案,但我会使用依赖注入。我将介绍一个新的“中间人”类BackgroundRunner,以简化测试:
public interface InvokableInBackground {
public void invokeMeInBackground();
}
public class ToBeMocked implements InvokableInBackground {
public void invokeMeInBackground() {
// do stuff
}
}
public class BackgroundRunner {
public void invokeInBackground(InvokableInBackground invokableInBackground) {
new Thread(new Runnable() {
@Override
public void run() {
invokableInBackground.invokeMeInBackground();
}
}).start();
}
}
public class SUT {
final BackgroundRunner backgroundRunner;
final ToBeMocked toBeMocked;
SUT(BackgroundRunner backgroundRunner, ToBeMocked toBeMocked) {
this.backgroundRunner = backgroundRunner;
this.toBeMocked = toBeMocked;
}
void methodToBeTested(...) {
ToBeMocked toBeMocked = ...;
backgroundRunner.invokeInBackground(toBeMocked);
}
}
然后,您的单元测试将提供两个测试双精度数,一个用于ToBeMocked对象,另一个用于BackgroundRunner对象。然后它可以验证使用toBeMocked作为参数调用BackgroundRunner对象的invokeInBackground()方法。
在我工作的商店中,每个人都同意BackgroundRunner类(其上面的完整的实现)足够简单,它不需要测试。
事后补充:我刚刚发明的BackgroundRunner类看起来非常像ExecutorService的简单版本。