Junit测试实例

来源:互联网 发布:我的世界mac版mod 编辑:程序博客网 时间:2024/06/13 06:15
AbstractTransactionalSpringContextTest类
import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.TestExecutionListeners;import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;import org.springframework.test.context.transaction.TransactionConfiguration;import org.springframework.test.context.transaction.TransactionalTestExecutionListener;import org.springframework.transaction.annotation.Transactional;import shop.constant.ShopCommonConstant;/** * 1.指定测试用例运行器 */@RunWith(SpringJUnit4ClassRunner.class)/** * 2.事务配置 * transactionManager="这里是applicationContext.xml文件中事务管理器的名称,默认是transactionManager" * defaultRollback=true 事务执行后是回滚还是提交,如果不希望测试用数据留在数据库中,可以设置为true * (Spring4.2以后),@TransactionConfiguration已经标注为过时的注解,官方文档 * http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/transaction/TransactionConfiguration.html *///@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)/** * 3.注册测试用例的监听器 * 加入TransactionalTestExecutionListener后,它负责解析 @Transactional、@NotTransactional以及 @Rollback 等事务注解的注解 * @Transaction 注解让测试方法工作于事务环境中,不过在测试方法返回前事务会被回滚。你可以使用 @Rollback(false) * 让测试方法返回前提交事务。而 @NotTransactional注解则让测试方法不工作于事务环境中。 * 加入DependencyInjectionTestExecutionListener后,可以识别@Autowired,本类的属性名与applicationContext中bean * id或name相同,则Autowired *///@TestExecutionListeners({ TransactionalTestExecutionListener.class,DependencyInjectionTestExecutionListener.class })/** * 使测试用例的所有方法都将工作于事务环境下 */@Transactional(transactionManager="transactionManager")/** * 4.上下文配置 * locations:指定applicationContext.xml文件的路径,可以通过该属性手工指定 Spring * 配置文件所在的位置,可以指定一个或多个 Spring * 配置文件@ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”}) * inheritLocations:是否要继承父测试用例类中的Spring配置文件,默认为 true */@ContextConfiguration(locations = { "classpath*:spring.xml","classpath*:spring-mybatis.xml" })public abstract class AbstractTransactionalSpringContextTest extendsAbstractTransactionalJUnit4SpringContextTests {public static final String channel = ShopCommonConstant.CHANNEL_GOLD_CODE_H5;public static final String ip = "192.168.1.58";public static final String merchantId = "1001";public static final String manageId = "UR75148161464287982";public static final String version = "1.0";public static final String userName = "admin";public static final String userPassword = "123456";public static final String requestSign = "1.0";}

说明:
(1).原defaultRollback属性现在由专门的注解@Rollback(新增注解)代替,其中只有一个属性就是boolean型的value,作用没变,值为true表示测试时如果涉及了数据库的操作,那么测试完成后,该操作会回滚,也就是不会改变数据库内容;值为false则与此相反,表示你测试的内容中对数据库的操作会真实的执行到数据库中,不会回滚。官方文档中还给出了一个新注解@Commit,该注解与@Rollback只能使用一个,同时用貌似可能出现问题,@Commit注解中无属性需要设置,不像@Rollback中还有一个value属性,用了@Commit,你的测试操作会改变数据库,不会回滚,等同于@Rollback(value=false)。这里建议使用@Rollback,不要用@Commit,这样起码你有两种选择可以选。
(2).原来放在@TransactionConfiguration注解中的transactionManager属性现在放在了@Transactionl注解中。

顺便提一下@RunWith注解的作用。
首先我们写了一个测试类,该类中会有许多测试方法,测试方法上面会利用@BeforeClass、@before、@Test、@after、@AfterClass 这5个注解进行测试,类有了,方法有了,那么当你执行某个测试方法时,是由谁来调用的这个测试方法呢,或者说,你执行的测试方法是在哪里运行的呢,答案就是@RunWith注解里面标注的类,也就是说这个注解的作用是告诉系统你执行测试方法时,调用者是谁,这里就是SpringJunit4ClassRunner类。默认情况下,也就是假如你省略了@RunWith注解,测试类上面不写它,系统默认的是相当于你注解了@RunWith(BlockJUnit4ClassRunner.class),实际上SpringJunit4ClassRunner继承了BlockJUnit4ClassRunner。因为你的项目中使用了Spring,那么测试方法中要测试的内容一般都会用到Spring管理的bean,此时你只能用SpringJunit4ClassRunner而不能用BlockJUnit4ClassRunner了,否则Spring环境中管理的东西你是无法在测试方法中使用的,测试方法拿不到会报空指针。

xml文件

<!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>

测试用例


import model.dubbo.DubboxResponse;import org.junit.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.transaction.TransactionConfiguration;import org.springframework.transaction.annotation.Transactional;import org.springframework.transaction.event.TransactionalEventListener;import shop.inter.pad.IGoldShopPadOther;import shop.model.pad.AddUserPadRequest;import shop.model.pad.ChangePasswordPadRequest;import shop.model.pad.UserLoginPadRequest;import shop.model.pad.UserLoginPadResponse;public class TestIGoldShopPadOther extendsAbstractTransactionalSpringContextTest {@Autowiredpublic IGoldShopPadOther goldShopPadOther;/** * 销售员登录 *  * @param request * @return */@Test@Rollback(value=false)//@Rollback(value=true)public void testUserLoginPad() {UserLoginPadRequest request = new UserLoginPadRequest();request.setChannel(channel);request.setIp(ip);request.setMerchantId(merchantId);request.setUserName(userName);request.setUserPassword(userPassword);request.setVersion(version);request.setRequestSign(requestSign);UserLoginPadResponse dr= goldShopPadOther.userLoginPad(request);System.out.println(dr.getSuccess()==true?"-------------------登录成功-------------------":"-------------------登录失败-------------------");}@Test@Rollback(value=true)public void testChangePasswordPad() {ChangePasswordPadRequest request = new ChangePasswordPadRequest();request.setChannel(channel);request.setMerchantId(merchantId);request.setIp(ip);request.setUserName(userName);request.setPassword(userPassword);request.setNewPassword("123456");DubboxResponse dr= goldShopPadOther.changePasswordPad(request);System.out.println(dr.getSuccess()==true?"-------------------修改登录密码成功--------------":"-------------------修改登录密码失败-----------");}//@Test//public void testAccountCenterPad() {//AccountCenterPadRequest request = new AccountCenterPadRequest();//request.setChannel(channel);//request.setMerchantId(merchantId);//request.setIp(ip);//request.se//goldShopPadOther.accountCenterPad(request);//}//@Test//public void testAddUserPad() {//AddUserPadRequest request = new AddUserPadRequest();//request.setChannel(channel);//request.setMerchantId(merchantId);//request.setIp(ip);//request.setManageId(manageId);//goldShopPadOther.addUserPad(request);//}}


0 0
原创粉丝点击