java - Mockito 方法调用链

标签 java junit mocking mockito

  @PostMapping("/node{id}/delete")
  public ResponseEntity<CallbackResponse> delete(@RequestParam("eventId") String eventId, @RequestParam("id") String nodeId) throws ResourceNotFoundException {

      serviceA.remove(eventId);
      client.getServiceB().deleteById(nodeId);
      return new ResponseEntity<>(new CallbackResponse(true), HttpStatus.OK);
  }

我是单元测试新手。 请帮助我为上述休息 Controller 方法编写测试用例

我尝试了以下测试,但它不起作用

    @Test
    public void testDeleteAgent() throws Exception{
        ServiceA serviceA = Mockito.mock(ServiceA.class);
        NodeClient client = Mockito.mock(NodeClient.class);

        Mockito.doNothing.when(serviceA).remove(Mockito.any());
        Mockito.doNothing.when(client.getServiceB()).deleteById(Mockito.any());
        ResponseEntity<CallbackResponse> result = agentController.delete("123", "456");
        Assert.assertEquals(HttpStatus.OK.value(), result.getStatusCode());
    }

当我运行上述测试时,我收到未完成的 stub 检测到错误

我像这样创建了模拟 Controller

    private ServiceA serviceA = Mockit.mock(ServiceA.class);
    private NodeClient client = Mockit.mock(NodeClient.class);
    private AgentController agentController = new Controller(serviceA, client);

最佳答案

假设某个地方有一个 ServiceB 类,让我们尝试一下

public class AgentController{

  @Inject
  private Client client;


  @PostMapping("/node{id}/delete")
  public ResponseEntity<CallbackResponse> delete(@RequestParam("eventId") String eventId, @RequestParam("id") String nodeId) throws ResourceNotFoundException {

      serviceA.remove(eventId);
      client.getServiceB().deleteById(nodeId);
      return new ResponseEntity<>(new CallbackResponse(true), HttpStatus.OK);
  }
}

@RunWith(MockitoJUnitRunner.class)
public class AgentControllerTest{

    @InjectMocks
    private AgentController agentController;

    @Mock
    private Client client;

    public void test(){
        ServiceB serviceB = Mockito.mock(ServiceB.class);
        Mockito.doReturn(serviceB).when(client).getServiceB();
        Mockito.doNothing().when(serviceB).deleteById(Mockito.any());

       // other here
    }

}

关于java - Mockito 方法调用链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60110208/

相关文章:

java - 意外异常的断言错误消息

c# - 为什么我不能更改 Rhino Mocks stub 对象中的返回值?

java - 如何使用插入语句生成 liquibase 变更日志?

java - 使用旧版 JAVA API 进行 regExp 匹配

java - Elastic Search - 排序 - 在 0 条件下在整数字段之间切换

unit-testing - 除了 "all of them"作为答案之外,什么类型的应用程序(具体)在单元测试中取得了真正的成功?

java - 有没有办法在另一个方法中使用实例变量?

c++ - 如何修复 trompeloeil 中的 "RETURN missing for non-void function"错误?

php - 为什么 phpunit 不在模拟类中运行 __destruct() 以及如何强制运行它?

java - Apache Ignite - 从缓存中获取所有内容