我為我的 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);
添加回答
舉報
0/150
提交
取消