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

Java 如何模拟调用Android测试方法的方法?,java,android,unit-testing,mockito,Java,Android,Unit Testing,Mockito,我为我的android应用程序编写测试,我需要模拟我的类中的一个方法,该方法在我测试的方法中调用。 这是我的班级: public class MyFirebaseMessagingService extends FirebaseMessagingService { ..... @Override public void onMessageReceived(RemoteMessage remoteMessage) { if (!isAppOnForeground(this

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

public class MyFirebaseMessagingService extends FirebaseMessagingService {
.....
 @Override
public void onMessageReceived(RemoteMessage remoteMessage) {
            if (!isAppOnForeground(this)) {
                DoSomeThing();
            }
        }
    }

public boolean isAppOnForeground(Context context) {
       return isAppOnForeground;
    }
}
isAppOnForeground
返回true和false时,我想测试
onMessageReceived
方法

我试着

@Test
public void onMessageReceived() {
MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);
when(mockMyFirebaseMessagingService.isAppOnForeground(any(Context.class))).thenReturn(false);
mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);
...
}
但是当我运行这个测试时,我没有在MessageReceived上看到调用方法
(断点不起作用)。

如何模拟
isAppOnForeground
并调用
onMessageReceived

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

MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.mock(MyFirebaseMessagingService.class);
您正在创建一个mock,一个空mock,它对原始类的实现一无所知

您想改用
spy()
。试试这个:

MyFirebaseMessagingService myFirebaseMessagingService = new MyFirebaseMessagingService();
MyFirebaseMessagingService mockMyFirebaseMessagingService = org.mockito.Mockito.spy(myFirebaseMessagingService);
doReturn(false).when(mockMyFirebaseMessagingService).isAppOnForeground(any(Context.class));
mockMyFirebaseMessagingService.onMessageReceived(remoteMessage);