Mockito单测,mock service层的mapper

转载:https://blog.csdn.net/paincupid/article/details/53561435

1、引入mockito jar包

<dependency>
   <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>2.0.2-beta</version> </dependency>

2、对于Mockito而言,有两种方式创建:

  1. mock为一个interface提供一个虚拟的实现,
  2. spy为object加一个动态代理,实现部分方法的虚拟化
  • @Mock,被标注的属性是个mock
  • @Spy,被标注的属性是个spy,需要赋予一个instance。提供了一种对真实对象操作的方法
  • @InjectMocks,将本test中的mock或者spy注入到被标注的属性中,根据构造函数的参数名,或者setter,或者私有属性名。

3、如果你使用spring,上述代码还可以进一步简化,因为Mockito提供了factory的方法用来创建mock和spy。

### 正常的bean声明

<bean id=”svc” class=”Svc”> <bean id=”dao1” class=”…”> <bean id=”dao2” class=”…”>

mock

<bean id="operationService" class="org.mockito.Mockito" factory-method="mock"> <constructor-arg value="com.paincupid.api.operation.OperationService" /> </bean>

请注意到svc不变化,mock将自动注入进入。这是因为spring的bean容器,如果id一样,后声明的bean会覆盖前面的bean。

spy

<bean id="daoInst"  class="DaoInstance"></bean> <bean id="dao2" class="org.mockito.Mockito" factory-method="spy"> <constructor-arg ref="daoInst"></constructor-arg> </bean> 

同样svc不变化,直接注入。请注意spy需要获得一个实例。

4、如果不用xml的话,可以在java中注解的方式引入

FinanceServiceTest.java

package com.paincupid.springmvc.mybaitsgenerator.persistence.test; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import com.paincupid.springmvc.base.JUnitDaoBase; import com.paincupid.springmvc.finance.domain.Finance; import com.paincupid.springmvc.finance.persistence.FinanceMapper; import com.paincupid.springmvc.finance.service.FinanceService; public class FinanceServiceTest extends JUnitDaoBase{ @InjectMocks FinanceService service; @Mock FinanceMapper mapper; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void selectByExampleTest() { Finance f = Mockito.mock(Finance.class);; f.setBak("bak"); f.setConsumer("consumer"); String id = "1"; Mockito.when(mapper.searchFinanceById(id)).thenReturn(f); Finance returnF = service.searchFinanceById(id); Mockito.verify(mapper).searchFinanceById(id); Assert.assertEquals(f.getConsumer(), returnF.getConsumer()); } }

JUnitDaoBase.java

package com.paincupid.springmvc.base; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) //使用classpath,会自动去class下的目录去找,所以暂时把它放到了resource目录下。 @ContextConfiguration(locations = {"classpath:/junitTestContext.xml"}) @Transactional public class JUnitDaoBase extends AbstractTransactionalJUnit4SpringContextTests { } 

配置文件junitTestContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd " default-lazy-init="true"> <!-- 扫描service、dao组件 --> <context:component-scan base-package="com.paincupid.springmvc.*.service,com.paincupid.springmvc.*.persistence" /> <!-- 使用jackson 支持json Java中直接返回类,而不用再使用Json转换 2015.12.27 --> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <ref bean="jsonHttpMessageConverter" /> </list> </property> </bean> <bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <!-- 分解配置 jdbc.properites --> <!-- <context:property-placeholder location="classpath:jdbc.properties" /> --> <!-- 数据源BoneCP --> <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/lee" /> <property name="username" value="lee" /> <property name="password" value="eee" /> <property name="maxConnectionsPerPartition" value="30" /> <property name="minConnectionsPerPartition" value="10" /> <property name="partitionCount" value="1" /> <property name="acquireIncrement" value="5" /> <property name="statementsCacheSize" value="100" /> </bean> <!-- sessionFactory 将spring和mybatis整合 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- value可以填多个 --> <property name="typeAliasesPackage" value="com.paincupid.springmvc.system.domain,com.paincupid.springmvc.test.domain ,com.paincupid.springmvc.finance.domain" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.paincupid.springmvc.*.persistence" /> </bean> <!-- 事务 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" scope="singleton"> <property name="dataSource" ref="dataSource"></property> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true" /> <tx:method name="select*" read-only="true" /> <tx:method name="add*" isolation="READ_COMMITTED" rollback-for="Exception" /> <tx:method name="update*" isolation="READ_COMMITTED" rollback-for="Exception" /> <tx:method name="delete*" isolation="READ_COMMITTED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- 在service层实现事务控制 --> <aop:config> <aop:pointcut expression="execution(* com.paincupid.springmvc.*.service.*.*(..))" id="pointCut" /> <aop:advisor 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值