【问题标题】:how to inject Mockito service layer in clientside interface如何在客户端接口中注入 Mockito 服务层
【发布时间】:2020-03-09 06:58:16
【问题描述】:
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private TwinApiUserClient userClient; //client side interface we get the data through some queries
    public TwinCollectionUserResponse getUserIds() {
        return userClient.query(UUID.fromString("s8yt544-sadsa4-sda-dfds-hfdsfsjfs8"), null, null).getBody();
    }

UserServiceTest.class

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserSerivceTest{

    @Autowired
    private UserServiceImpl UserService;

    @MockBean
    private TwinApiUserClient userClient;

    @Test
    public void testGetTwins() {
        TwinUsernResponse userResponse = this.getTwinUserResponse();//here userResponse is hard coded
        Mockito.when(userClient.query(UUID.fromString("s8yt544-sadsa4-sda-dfds-hfdsfsjfs8"), null, null).getBody()).thenReturn(userResponse);
        assertThat(UserService.getUserIds()).isEqualTo(userResponse);
    }

但我得到一个空指针异常。尝试通过 Mockito 硬编码初始化 TwinApiUserClient 接口时。

【问题讨论】:

    标签: java spring-boot junit junit4 junit5


    【解决方案1】:

    请参阅@MockBean 文档,该文档允许您使用Mockito deep stubs

        @MockBean(answer = RETURNS_DEEP_STUBS)
        private TwinApiUserClient userClient;
    

    这允许您模拟一连串调用的结果,例如 a().b().c(),这是您在此处尝试的。

    【讨论】:

      【解决方案2】:
      Mockito.when(userClient.query(UUID.fromString("s8yt544-sadsa4-sda-dfds-hfdsfsjfs8"), null, null).getBody()).thenReturn(userResponse);
      

      我认为,您的问题在.getBody() 部分。当您设置模拟时,您应该编写预期的方法调用和预期的结果。所以,预期的方法调用是.query() 方法,而预期的结果,我猜是userResponse

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2017-03-17
        • 2021-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多