【问题标题】:I have a NullPointerException in a mock, and I don't know what to do我在模拟中有一个 NullPointerException,我不知道该怎么做
【发布时间】:2016-08-11 20:59:42
【问题描述】:

我正在为这个方法做一个模拟:

public String buscarDescripcion(MaestroDTO departamento, String codigoMunicipio){
        String descripcion = null;
        List<MaestroDTO> listaMunicipios = getListaMucipios(departamento);
        if(listaMunicipios != null) {
            for (MaestroDTO maestroDTO : listaMunicipios) {
                if(maestroDTO.getCodigo().equals(codigoMunicipio)){
                    descripcion = maestroDTO.getNombre();
                    break;
                }
            }
        }
        return descripcion;
    }

在测试类中。这将返回一个完整的城市名称列表。 但是当我运行测试时,出现 NullPointerException 错误。 我在测试类中使用的模拟是这样的:

listaCiudad = mock(ListaCiudad.class);

when(listaCiudad.buscarDescripcion(any(MaestroDTO.class), any(BigDecimal.class).toString())).thenReturn("MEDELLIN");

方法buscarDescription 有两个参数,MaestroDTO 和一个String。当我使用字符串运行测试时,这向我显示了一个转换错误。当我使用 BigDecimal.toString() 时,这会显示一个空指针异常。我不知道我是否以错误的方式调用了这个参数,因为我对模拟不太了解! 我感谢您的帮助!谢谢! (对不起我的英语)。

【问题讨论】:

  • 语法when(object.methodCall()).thenReturn(x) 无论如何都会执行真正的方法。如果你想避免它,请改用doReturn(x).when(object).methodCall())
  • 堆栈跟踪或调试器应该告诉你什么是空的。我猜这是你的模拟没有处理的其他东西。

标签: java mocking mockito


【解决方案1】:

你没有正确地存根你的模拟。你应该用MockitoanyString()替换any(BigDecimal.class).toString()

Mockito.when(listaCiudad.buscarDescripcion(Mockito.any(MaestroDTO.class), Mockito.anyString())).thenReturn("MEDELLIN");

【讨论】:

  • 你的意思是存根 :)
  • 它说 The method anyString() is undefined for the type ExtractorIncapacidadesTest..(测试类的名称)
  • @KarenTatianaGmezSuarez-Ce Mockito.anyString()。这相当于Mockito.any(String.class)
  • @noscreenname 我认为它有效,非常感谢。致敬!
猜你喜欢
  • 1970-01-01
  • 2014-02-28
  • 2017-05-05
  • 1970-01-01
  • 2022-01-08
  • 2022-11-17
  • 2019-04-15
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多