Junit测试实例

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 extends
		AbstractTransactionalJUnit4SpringContextTests {
	
	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 extends
		AbstractTransactionalSpringContextTest {

	@Autowired
	public 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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值