为了账号安全,请及时绑定邮箱和手机立即绑定

在 Android 的测试方法中调用的模拟方法如何?

在 Android 的测试方法中调用的模拟方法如何?

小怪兽爱吃肉 2022-10-12 15:59:42
我为我的 android 应用程序编写测试,我需要从我的类中模拟一个方法,该方法在我测试的方法中调用。这是我的课:public class MyFirebaseMessagingService extends FirebaseMessagingService {..... @Overridepublic void onMessageReceived(RemoteMessage remoteMessage) {            if (!isAppOnForeground(this)) {                DoSomeThing();            }        }    }public boolean isAppOnForeground(Context context) {       return isAppOnForeground;    }}我想在返回真假onMessageReceived时测试方法。isAppOnForeground我试试@Testpublic void onMessageReceived() {MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);when(mockMyFirebaseMessagingService.isAppOnForeground(any(Context.class))).thenReturn(false);mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);...}但是当我运行这个测试时,我没有看到方法调用onMessageReceived(断点不起作用)。我怎样才能嘲笑isAppOnForeground和打电话onMessageReceived?
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

你看不到onMessageReceived()方法正在运行,因为它没有。


MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);

您正在创建一个模拟,一个空模拟,它对原始类的实现一无所知。


你想spy()改用。尝试这个:


MyFirebaseMessagingService myFirebaseMessagingService = new MyFirebaseMessagingService();

MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.spy(myFirebaseMessagingService);

doReturn(false).when(mockMyFirebaseMessagingService).isAppOnForeground(any(Context.class));

mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);


查看完整回答
反对 回复 2022-10-12
  • 1 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信