##=================基于Junit4的单元测试设置与使用====================

------------------【注意事项??-----------------------------------------
1，所有测试组件所在包必须在?com.dvp】包下，是它的子包??
2，单元测试类?要继承?bap.core.test.SpringTestCase】类，否则单元测试无效??
	如下?示：
		public class Tester extends SpringTestCase{}
		
3，首先确保工程引用了【junit4】的类库。否则@Test注解会引用不到?单元测试类中的测试方法必须标注【org.junit.Test】注解，否则测试方法无法运行?
	如下?示：
		@Test
		public void test1(){}
		
4，在测试方法中可以直接调用?this.baseDao】来调用底层封装好的访问数据库的接口?
	如下?示：
		@Test
		public void test1(){
			this.baseDao.delete(User.class);
		}
		
5，当测试方法执行完毕之后，测试方法中的所有数据库更新和插入操作默认都会回滚（不会改变数据库的数据）?如果要改变数据库的数据在测试方法上增加
	【org.springframework.test.annotation.Rollback】注解，并标注属性为【false】??
	如下?示：
		@Test
		@Rollback(false)
		public void test1(){
			this.baseDao.delete(User.class);
		}
		
6，测试方法中的所有数据操作默认都在各自的事务中，不在同一个事务中，如果要把所有操作放在一个事务中，在测试方法上增?
	【org.springframework.transaction.annotation.Transactional】注解??
	如下?示：
		@Test
		@Transactional
		public void test1(){
			//这样的话以下两个操作都在?个事务中
			this.baseDao.delete(User.class);
			this.baseDao.delete(Card.class);
		}
		
7，测试组件只支持标注了?bap.core.annotation.TestComponent】注解的Class。其他注解不支持（@Service、@Controller、@Component）??
	如下?示：
		@TestComponent
		public class TestService extends BaseService{}
		
8，标注了【@TestComponent】注解的Class上不能标有其他Spring组件注解（@Service、@Controller、@Component），否则该测试类无效。保证其他注解为注释状???
	如下??:
		@TestComponent
		//@Service 
		public class TestService extends BaseService
		

------------------【使用场?1：在测试方法中直接调用BaseDao方法测试Hql或?sql语句是否正确?--------------------
1，新建一个测试类【com.dvp.test.Tester】（类名自定义，但必须是在com.dvp包下），让它继承【SpringTestCase】，同时新建?个测试方法?test1】（方法名自定义）??
2，在测试方法中调用底层BaseDao类下的方法执行HQL语句?

	示例如下?示：
		public class Tester extends SpringTestCase{
	
			@Test //必须标注
			//@Transactional //使如下两个操作语句放在一个事务中
			//@Rollback(false) //事务不再回滚，会改变数据库的数据
			public void test1()
			{
				this.baseDao.execNoResultHql("Update User set name = ? where id = ?", "李四","1");
				this.baseDao.execNoResultHql("Update User set name = ? where id = ?", "王五","2");
			}
		}

------------------【使用场?2：调用写好的Service方法进行单元测试?--------------------
1，假定我们有?个写好的Service类叫做?com.dvp.test.UserService】，里面有一个方法??
	示例代码如下?
		@Service
		public class UserService extends BaseService{
			
			@Transactional
			public void updateByIds(String ids)
			{
				String[] id = ids.split(",");
				for(int i = 0;i<id.length;i++){
					User user = this.baseDao.get(User.class, id[i]);
					user.setOrderIndex(i);
					this.baseDao.update(user);
				}
			}
		}
		
2，新建一个基于java代码的Spring上下文配置类【com.dvp.test.UnitTestJavaConfig】（类名自定义，但必须是在com.dvp包下）?标注?@TestComponent】注解??
	并在该配置类中初始化?个UserService的对象，并放入Spring容器中??
	示例代码如下?
		@TestComponent
		public class UnitTestJavaConfig {
		
			@Bean(name="com.dvp.test.UserService")
			public UserService userService()
			{
				return new UserService();
			}
			
			/**
			 * 如果有多个Service方法用于测试，可以依次声明多个类似方法，把对象放入spring容器中??
			 */
			//@Bean(name="com.dvp.test.CardService")
			//public CardService cardService()
			//{
			//	return new CardService();
			//}
		}
		
3，新建一个测试类【com.dvp.test.Tester】（类名自定义，但必须是在com.dvp包下），让它继承【SpringTestCase】，同时新建?个测试方法?test1】（方法名自定义）??
	并把【UserService】类使用【org.springframework.beans.factory.annotation.Autowired】注解注入到测试类中。并在测试方法中执行【updateByIds】方法??
	示例代码如下?
		public class Tester extends SpringTestCase{
			
			@Autowired
			private UserService userService;
			
			@Test //必须标注
			//@Rollback(false) //事务不在回滚，会改变数据库的数据
			public void test1()
			{
				userService.updateByIds("1,2,3");
			}
		}
