【问题标题】:Mock constructor with mockito使用 mockito 模拟构造函数
【发布时间】:2013-11-29 12:37:27
【问题描述】:

我想将构造函数模拟为方法。

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

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

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

但是给我这个错误 org.mockito.exceptions.misusing.InvalidUseOfMatchersException:

知道为什么吗?

【问题讨论】:

标签: java junit mockito


【解决方案1】:

您可以使用PowerMock 模拟构造函数。

如果由于某种原因不能使用 PowerMock,最可行的解决方案是将工厂注入到包含此方法的任何类。然后,您将使用工厂创建您的 GeneraIDParaEntidadCliente 对象并模拟工厂。

【讨论】:

  • 我尝试了 org.powermock.api.mockito.PowerMockito.whenNewnew(GeneraIDParaEntidadCliente(String.class, Entidad.class).thenReturn(generaIdMock) 但不起作用。知道为什么吗?跨度>
  • 我必须查看更多您的代码才能确切知道出了什么问题。你在测试类上使用@RunWith(PowerMockRunner.class) 和@PrepareForTest 吗?见here
  • @RunWith(PowerMockRunner.class) 和@PrepareForTest({GeneraIDParaEntidadCliente .class})
【解决方案2】:

有几种方法可以做到这一点,在my article on the Mockito wiki中进行了描述

【讨论】:

  • 哈哈...而不是提供解决方案...他们告诉自己更改代码
【解决方案3】:

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

// define you object
public MainClassObj instanceClass;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多