gpt4 book ai didi

java - Android测试方法中如何mock方法调用?

转载 作者:行者123 更新时间:2023-12-02 09:59:20 25 4
gpt4 key购买 nike

我为我的 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);
...
}

但是当我运行此测试时,我没有看到方法 onMessageReceived 中的调用(断点不起作用)。如何模拟 isAppOnForeground 并调用 onMessageReceived

最佳答案

您看不到 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);

关于java - Android测试方法中如何mock方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55749918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com