##=================基于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");
			}
		}
