Verify方法从Java中的同一个类调用另一个方法

时间:2018-01-19 22:09:00

标签: java android

我正在使用Java开发Android,并且有一个类是基类活动类的子类。我的子类中的方法从基类调用另一个方法。在单元测试中,我想验证是否在执行子类方法的情况下调用基类中的方法。我该怎么做?

public class MyActivity extends Activity {
  public void myMethod() {
    moveTaskToBack(false);
  }
}

以下是我的尝试:

MyActivity myActivity = new MyActivity();
final Activity mockActivity = Mockito.spy(Activity.class);
myActivity.myMethod();
Mockito.verify(mockActivity, Mockito.times(1)).moveTaskToBack(false);

看到错误:

Wanted but not invoked:
myActivity.moveTaskToBack(false);
Actually, there were zero interactions with this mock.

我没有正确测试吗?

2 个答案:

答案 0 :(得分:0)

我没有太多使用Mockito,但你是否尝试过改变

Mockito.verify(mockActivity, Mockito.times(1)).moveTaskToBack(false);

Mockito.verify(myActivity, Mockito.times(1)).moveTaskToBack(false);

您似乎正在测试错误的活动对象

答案 1 :(得分:0)

您需要做的是:

MyActivity myActivity = Mockito.spy(MyActivity.class);
myActivity.myMethod();
Mockito.verify(myActivity, Mockito.times(1)).moveTaskToBack(false);

您不需要关心父类,因为子类是一种超类。 MyActivity是活动。换句话说,你在MyActivity类中拥有完全相同的moveTaskToBack()方法,实际上你正在调用它。

当然,您可以使用父级参考super.moveTaskToBack(false)显式调用该方法,但这对您的用例没有任何意义。在这种情况下,测试将失败,因为moveTaskToBack将被超级引用调用