gpt4 book ai didi

java - 为什么我会收到 MissingMethodInitationException?

转载 作者:行者123 更新时间:2023-12-02 06:55:53 25 4
gpt4 key购买 nike

我有一个通过 Spring 调用 DAO 的服务,所以现在我尝试使用模拟进行一些测试。这是我的背景:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"
default-autowire="byName">

<import resource="classpath*:invoice-core-config-test.xml" />
<import resource="classpath:invoice-cfd-config.xml" />
<import resource="classpath*:invoice-almacenaje-config.xml" />
<import resource="classpath*:invoice-firmadigital-config.xml" />
<bean id="comprobanteServiceMock" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg type="java.lang.Class"
value="com.praxis.fact.core.entity.Comprobante" />
</bean>
</beans>

这是我的服务类别:

public class ComprobanteServiceImpl implements ComprobanteService {

private static final Logger logger = LoggerFactory.getLogger(ComprobanteServiceImpl.class);

/**
* Dao de comprobantes que se va a utilizar para el servicio.
*/
@Autowired
@Qualifier("comprobanteDao")
private ComprobanteDao comprobanteDao;


@Override
public List<MedioGeneracion> getMediosGeneracion() throws BusinessException {
try {
if (comprobanteDao == null) {
ClassPathXmlApplicationContext ctx = new
ClassPathXmlApplicationContext("classpath:invoice-core-config-test.xml");
comprobanteDao = (ComprobanteDao) ctx.getBean("comprobanteDao");
}
return comprobanteDao.getMediosGeneracion();
} catch (Exception daoExc) {
throw new BusinessException(CodigoError.ERROR_NEGOCIO, "Error al obtener los medios de generacion", daoExc);
}
}
}

最后这是我的测试方法:

@Test
public void testSalvarComprobanteConMedioGeneracion() {
try {
ClassPathXmlApplicationContext ctx = new
ClassPathXmlApplicationContext("classpath:context.xml");
this.comprobanteTestBean = (Comprobante) ctx.getBean("comprobanteTestBean");
this.comprobanteService = (ComprobanteService)ctx.getBean("comprobanteService");
MockitoAnnotations.initMocks(this);
when(comprobanteService.saveComprobante(comprobanteTestBean)).thenReturn(obtenerRespuesta());
} catch (BusinessException e) {
logger.error("Error al iniciar el setup() de la prueba", e.getMessage());
} catch (InitializationError e) {
logger.error("Ejecuta con: -DfactElectronica.home=C:/tmp");
}
}

private Long obtenerRespuesta() {
System.out.println("obtenerRespuesta");
return new Long(1);
}

所以当我运行测试时我得到: org.mockito.exceptions.misusing.MissingMethodInitationException:when() 需要一个参数,该参数必须是“模拟上的方法调用”。例如: when(mock.getArticles()).thenReturn(articles);

此外,出现此错误的原因可能是:1. stub 以下任一方法:final/private/equals()/hashCode() 方法。 这些方法无法被 stub /验证。2.在when()中,你不会调用mock上的方法,而是调用其他对象上的方法。

at com.praxis.fact.cfd.business.impl.ComprobanteServiceImplTests.testSalvarComprobanteConMedioGeneracion(ComprobanteServiceImplTests.java:242)

为什么会发生这个错误?提前致谢。

最佳答案

唯一的模拟对象是 Comprobante 的实例。但是,您的 when() 方法围绕对 ComprobanteService 实例的调用。 ComprobanteService 对象需要是一个模拟对象,这就是错误消息的含义。

请注意,对于此测试,Comprobante 对象不需要是模拟对象,尽管您可能希望在其他测试中模拟它。

此外,您没有必要使用 MockitoAnnotations.initMocks(),因为您没有使用注释。

关于java - 为什么我会收到 MissingMethodInitationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368760/

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