junit 使用mockito的模拟构造函数

um6iljoc  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(357)

我想把构造函数模拟成方法。

public String generaID() {   
    GeneraIDParaEntidadCliente aux = new GeneraIDParaEntidadCliente(nombre, registro);   
    entidad.setID(aux.generaID);   
}

在我的测试中,我想做这样的事情:

when(new GeneraIDParaEntidadCliente(anyString(), any(Entidad.class)).thenReturn(generaIdMock)

但是给予我这个错误
知道为什么吗?

klr1opcd

klr1opcd1#

更新:从3.5.0版本开始,Mockito可以在没有PowerMockito情况下完成此操作。
您可以使用PowerMock来模拟构造函数。
如果由于某种原因不能使用PowerMock,最可行的解决方案是向包含该方法的任何类注入一个工厂,然后使用该工厂创建GeneraIDParaEntidadCliente对象并模拟该工厂。

6uxekuva

6uxekuva2#

有几种方法可以实现这一点,如my article on the Mockito wiki中所述

67up9zun

67up9zun3#

正在从duplicate复制答案:Mockito现在可以模拟构造函数(从版本3.5.0开始)https://javadoc.io/static/org.mockito/mockito-core/3.5.13/org/mockito/Mockito.html#mocked_construction

try (MockedConstruction mocked = mockConstruction(Foo.class)) {
   Foo foo = new Foo();
   when(foo.method()).thenReturn("bar");
   assertEquals("bar", foo.method());
   verify(foo).method();
 }
jqjz2hbq

jqjz2hbq4#

你可以将模拟对象作为参数发送给你的类构造函数,例如:

// define you object
public MainClassObj instanceClass;

// mock input parameter
MYClassObj mockedObj = Mockito.mock(MYClassObj.class);

// call construvtor with mocked parameter
instanceClass = new instanceClass(mockedObj);

相关问题