Java 如何模拟调用Android测试方法的方法?
我为我的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
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);