gpt4 book ai didi

java - 如何使用可变参数模拟方法?

转载 作者:行者123 更新时间:2023-12-02 09:36:01 24 4
gpt4 key购买 nike

我想要一个带有可变参数参数的方法,但它不起作用,因为该方法仍然被调用。我已经尝试过以下操作但没有成功:

ArgumentMatchers.any()

新字符串[] {}

新字符串[0]

但在所有这些情况下,该方法仍然会被调用。

这是我的类(class):

@Service
public class ProjetoServiceImpl extends DefaultServiceImpl<Projeto,ProjetoRepository> implements ProjetoService {

@Override
public List<Projeto> buscaAtestadosComFiltro(String[] filtros) {
List<Projeto> projetos = buscarTodos(); // I want to mock this line
projetos = filtraResultado(projetos, filtros);
return projetos;
}
}

/////////////////////////////////////////////////////////////////////////////////////////////

public class ProjetoServiceImplTest { 
private ProjetoServiceImpl projImpl;
@MockBean
private ProjetoService projetoServiceMock;

@Test
public void testaBuscaAtestadosComFiltro() {
Projeto projeto1 = new Projeto();
List<Projeto> projetos = new ArrayList<Projeto>();
projetos.add(projeto1);

when(projetoServiceMock.buscarTodos(ArgumentMatchers.<String>any())).thenReturn(projetos);

String[] filtros = new String[] {"java"};
projImpl = new ProjetoServiceImpl();
List<Projeto> result = projImpl.buscaAtestadosComFiltro(filtros);
assertNotNull(result);
}
}

最佳答案

问题是您正在创建的模拟与 projImpl 无关。

此外,@MockBean 是一个 spring 注释,而不是 mockito 注释,并且对您的用例没有任何作用。

您可以在 ProjetoServiceImpl 上使用 spy,但是有些人会建议您应该重构代码。将 buscarTodos 方法移至某种依赖项并进行模拟,这是一个可行的选择。

当您使用spy时,测试看起来就像这样:

@Test
public void testaBuscaAtestadosComFiltro() {
Projeto projeto1 = new Projeto();
List<Projeto> projetos = new ArrayList<Projeto>();
projetos.add(projeto1);

ProjetoServiceImpl projImpl = new ProjetoServiceImpl();
ProjetoServiceImpl spy = Mockito.spy(projImpl);

Mockito.when(spy.buscarTodos(ArgumentMatchers.<String>any())).thenReturn(projetos);

String[] filtros = new String[] {"java"};
List<Projeto> result = spy.buscaAtestadosComFiltro(filtros);
Assert.assertNotNull(result);
}
<小时/>

另一种替代(更干净)的解决方案可能是您在 buscarTodos 的实现中模拟 defaultRepository ,这可以在您之前的代码示例中看到问题。

在您的测试用例中,您需要在调用 findAll() 时提供匹配结果 (projetos)。

关于java - 如何使用可变参数模拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57512963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com