junit 如何模拟未实现接口的默认方法?

c2e8gylq  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(170)

我正在使用Junit/Mockito/PowerMockito
我有一个接口类

import retrofit2.Call;
import com.learning.model.user.User;
import java.io.IOException;

public interface UserService {
        @GET("/serviceUser/{userId}")
        Call<User> getUser(@Path("userId") String userId);
    
        default User getUserById(String userId) {
            try {
                return getUser(userId).execute().body();
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }

        static UserService getUserService(){
            //setup retrofit ...
        }
}

在另一个服务中:

public class DemoUser {
    public void doUserBusiness(String userId) {
        User user = UserService.getService().getUserById(userId);
        //do business logic here
    }
}

那么,在测试doUserBussiness方法时,如何模拟UserService.getService().getUserById(userId);以返回模拟用户呢?

23c0lvtd

23c0lvtd1#

您可以尝试使用mockStatic(),如下所示:

try (MockedStatic<UserService> serviceMockedStatic = mockStatic(UserService.class)) {
     serviceMockedStatic
         .when(() -> UserService.getService().getUserById(userId))
         .thenReturn(any());
}

更多信息-〉staticMock

相关问题