package org.springside.examples.showcase.unit.common; import static org.junit.Assert.*; import java.util.List; import javax.sql.DataSource; import org.hibernate.Hibernate; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springside.examples.showcase.common.dao.UserDao; import org.springside.examples.showcase.common.entity.User; import org.springside.examples.showcase.data.UserData; import org.springside.modules.test.spring.SpringTxTestCase; import org.springside.modules.test.utils.DbUnitUtils; import com.google.common.collect.Lists; /** * UserDao的集成测试用例,测试ORM映射及特殊的DAO操作. * * @author calvin */ @ContextConfiguration(locations = { "/applicationContext-test.xml" }) //演示指定非默认名称的TransactionManager. @TransactionConfiguration(transactionManager = "defaultTransactionManager") public class UserDaoTest extends SpringTxTestCase { private static DataSource dataSourceHolder = null; @Autowired private UserDao userDao; @Before public void loadDefaultData() throws Exception { if (dataSourceHolder == null) { DbUnitUtils.loadData(dataSource, "/data/default-data.xml"); dataSourceHolder = dataSource; } } @AfterClass public static void cleanDefaultData() throws Exception { DbUnitUtils.removeData(dataSourceHolder, "/data/default-data.xml"); } @Test public void eagerFetchCollection() { int userCount = countRowsInTable("SS_USER"); //init by hql List<User> userList1 = userDao.getAllUserWithRoleByDistinctHql(); assertEquals(userCount, userList1.size()); assertTrue(Hibernate.isInitialized(userList1.get(0).getRoleList())); //init by criteria List<User> userList2 = userDao.getAllUserWithRolesByDistinctCriteria(); assertEquals(userCount, userList2.size()); assertTrue(Hibernate.isInitialized(userList2.get(0).getRoleList())); } @Test @SuppressWarnings("unchecked") public void sampleDialect() { //select about 50% record from database. List<String> values = userDao.createQuery("select u.name from User u where sample()<50").list(); for (String name : values) { System.out.println(name); } } @Test public void upDialect() { Object value = userDao.createQuery("select u.name from User u where up(u.name)='ADMIN'").uniqueResult(); assertEquals("Admin", value); } @Test public void batchDisableUser() { List<String> ids = Lists.newArrayList("1", "2"); userDao.disableUsers(ids); assertEquals("disabled", userDao.get("1").getStatus()); assertEquals("disabled", userDao.get("2").getStatus()); } @Test public void uidGenerator() { User user = UserData.getRandomUser(); userDao.save(user); assertEquals(16, user.getId().length()); } }