代码类似于
Speed speed = readSpeed(Point A, Point B);
isOverLimit = limitCheck.speedCheck(speed);
如何使用mockito获取读取速度?
Mockito.when(readSpeed(0, 0).then
...
假设我应该使用类对象来调用它吗?
答案 0 :(得分:2)
Mockito通过创建将每个可覆盖的实现委托给模拟框架的对象的单个子类来有效地工作。
因此,您无法使用Mockito模拟您的方法(readSpeed
)一次所有实例或在您测试的系统中创建的实例 ,也不嘲笑任何静态或最终方法。如果readSpeed
是其中任何一个,或者需要在您不接触测试的实例上进行嘲笑,那么Mockito将无法为您效力;您需要重构,或使用PowerMockito(它会悄悄地重写您的系统,以重定向构造函数,最终调用以及对Mockito框架的静态调用)。
如果readSpeed
是您所测试系统上的公共非最终实例方法,那么您可以模拟它,并将其称为部分模拟您的组件。部分嘲讽可能很有用,但也可以考虑#34;代码气味" (如Mockito documentation中所述):理想情况下,您的测试类应该是一个要测试的原子单元,并且应该对正在测试的系统中的依赖而不是测试本身进行模拟。否则,您可以轻松地测试规范或测试模拟框架,而不是测试组件。
虽然更好的做法是将类拆分为更小的互连组件,但您可以在Mockito中使用部分模拟:
@Test public void componentChecksSpeed() {
YourComponent yourComponent = Mockito.spy(new YourComponent());
// Use doReturn, because the when syntax would actually invoke readSpeed.
doReturn(65).when(yourComponent).readSpeed(any(Point.class), any(Point.class));
yourComponent.run();
}