为了账号安全,请及时绑定邮箱和手机立即绑定

请教Spring做单元测试的时候如果通过mock虚拟jndi数据源?

请教Spring做单元测试的时候如果通过mock虚拟jndi数据源?

有只小跳蛙 2019-08-21 18:14:45
请教Spring做单元测试的时候如果通过mock虚拟jndi数据源
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

如何用mockito+spring进行单元测试(1)
  本文只说如何使用。
  假设你和我一样,也要构造一个系统,系统中有若干service,假设是A,B,C吧。
  其中A 依赖 B 依赖 C。C是最基本的。
  现在需要对A进行单测,但是C需要依赖于外部环境,而这个环境需要复杂而且不稳定的数据库。怎么办呢?这时你就需要mock掉C。
  第一步你需要在appctx文件中申明:
  <bean id="serviceC" name="service_c_Mock" class="org.mockito.Mockito" factory-method="mock">
  <constructor-arg value="com.x.y.x.ServiceC"></constructor-arg>
  </bean>
  需要注意的是bean的id必须要和A和B中autowire时使用名字一致。或者用类型也行。
  然后在单测case中用@Mock或者@Resource引入sercieC。接着在单测case的Setup中调用如下语句。
  MockitoAnnotations.initMocks(this);
  这时你测试A的方法,A访问B,B访问C时,调用会落在mockito生成的一个代理上。这个时候所调用的任何方法都会返回null。
  这可能不是你期望的,你可能期望在A用到的那些些方法上,输入某个值时返回某个特定的值。这个时候你需要:
  when().then();
  如果这还不够,你希望他输入某个值的时候返回特定值,如果输入的值不是特定值的时候,返回正常逻辑的值,你需要spy,并传入一个serviceC的实现。
  这个方法也解决了那个对于不mock的方法进行返回的问题。

查看完整回答
反对 回复 2019-08-24
  • 3 回答
  • 0 关注
  • 1040 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信