【问题标题】:How to mock 3rd party server response - Java如何模拟第 3 方服务器响应 - Java
【发布时间】:2021-11-16 01:17:56
【问题描述】:

我正在尝试对具有内部服务器连接(比如说套接字连接)的方法编写单元测试。我的测试用例失败了,我认为问题在于我模拟对象的方式。我是单元测试的新手,所以我不知道下一步该做什么。

这是我正在尝试测试的方法。

class ModuleSpectator {
    
    public long getTotalModules(String server_id){
        Server server = new Server(server_ip);                          // this connects to a 3rd party server.
        ServerState serverState =server.getServerState(server_id);      // resposnse from the server
        return = (long) serverState.getTotalModules();
    }
}

这是单元测试。

@Test
public void testGetTotalModules(){
    String server_id="ser_01";
    ModuleSpectator moduleSpectator = mock(ModuleSpectator.class);
    Server serverMock = mock(Server.class);
    ServerState serverState =new ServerState();
    serverState.setTotalModules(50);
    
    when(serverMock.getServerState(server_id)).thenReturn(serverState);
    
    assertEquals(50, moduleSpectator.getTotalModules(server_id));
    
}

assertEquals() 中的moduleSpectator.getTotalModules(server_id) 执行时,它实际上是在尝试连接第 3 方服务器。如何停止这种行为并成功设置和模拟响应?

【问题讨论】:

    标签: java unit-testing testing junit mocking


    【解决方案1】:
    Server serverMock = mock(Server.class);
    

    什么都不做。它不会模拟在您的getTotalModules 中创建的服务器实例。

    您可以在 ModuleSpectator 中添加 createServer 方法,然后您也可以模拟该方法,但您所做的只是测试您的模拟逻辑是否正确。

    一般来说,如果这段代码是完整的,而不是你正在做的事情的简化版本,那么可能不值得为此编写测试。

    【讨论】:

      【解决方案2】:

      你需要在真实对象上注入你的模拟

      例子:

      Server serverMock = mock(Server.class);
      ServerState serverState =new ServerState();
      serverState.setTotalModules(50);
      
      when(serverMock.getServerState(server_id)).thenReturn(serverState);
      
      ModuleSpectator moduleSpectator = new ModuleSpectator(serverMock);
      
      assertEquals(50, moduleSpectator.getTotalModules(server_id));
      

      【讨论】:

        猜你喜欢
        • 2022-01-18
        • 1970-01-01
        • 2017-03-08
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        • 1970-01-01
        相关资源
        最近更新 更多