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

我为我的 android 应用程序编写测试,我需要从我的类中模拟一个方法,该方法在我测试的方法中调用。这是我的课:


public class MyFirebaseMessagingService extends FirebaseMessagingService {

.....

 @Override

public void onMessageReceived(RemoteMessage remoteMessage) {

            if (!isAppOnForeground(this)) {

                DoSomeThing();

            }

        }

    }


public boolean isAppOnForeground(Context context) {

       return isAppOnForeground;

    }

}

我想在返回真假onMessageReceived时测试方法。isAppOnForeground


我试试


@Test

public void onMessageReceived() {

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

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

mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);

...

}

但是当我运行这个测试时,我没有看到方法调用onMessageReceived(断点不起作用)。我怎样才能嘲笑isAppOnForeground和打电话onMessageReceived?


小怪兽爱吃肉
浏览 127回答 1
1回答

饮歌长啸

你看不到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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java