Seam框架,搭建单元测试

哎,现在做Web开发真心难啊,配置一个单元测试都要这么久,等配置好了才发现so easy!

这几天可难为我了,记录一下:

1、在新建一个Seam工程的时候,会有一个*-test的工程,这是我们用来做单元测试的。(这里单元测试,可以在不用启动服务器(应用服务器)的情况下进行测试)

2、我们注意persistence.xml文件,源码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
             version="1.0">
             
   <persistence-unit name="anyeye">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/anyeyeDatasource</jta-data-source>
      <properties>
         <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="none"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="hibernate.cache.use_second_level_cache" value="true"/>
         <property name="hibernate.cache.use_structured_entries" value="true"/>
         <property name="hibernate.cache.use_query_cache" value="true"/>
         <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/anyeyeEntityManagerFactory"/>
      </properties>
   </persistence-unit>
    
</persistence>

开始的时候,出现的错误是找不到数据源,这里需要把<jta-data-source>java:/anyeyeDatasource</jta-data-source>注释掉;,结果还是出错,这是因为你没有启动你的应用服务器,这时你可以不用jndi,你可以利用直接连接数据库,修改以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
             version="1.0">
             
   <persistence-unit name="anyeye">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <!-- 单元测试需要注释 -->
      <!-- <jta-data-source>java:/anyeyeDatasource</jta-data-source> -->
      <!-- 单元测试需要注释 -->
      <properties>
      <!-- 用于单元测试 -->
         <property name="hibernate.connection.url"  value="jdbc:mysql://localhost/seam" />  
         <property name="hibernate.connection.driver_class"  value="org.gjt.mm.mysql.Driver" />  
         <property name="hibernate.connection.username" value="root" />  
         <property name="hibernate.connection.password" value="root" /> 
      <!-- 用于单元测试 -->
         <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
         <property name="hibernate.hbm2ddl.auto" value="none"/>
         <property name="hibernate.show_sql" value="true"/>
         <property name="hibernate.format_sql" value="true"/>
         <property name="hibernate.cache.use_second_level_cache" value="true"/>
         <property name="hibernate.cache.use_structured_entries" value="true"/>
         <property name="hibernate.cache.use_query_cache" value="true"/>
         <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/anyeyeEntityManagerFactory"/>
      </properties>
   </persistence-unit>
    
</persistence>

这个时候,我们的单元测试配置工作就完成了,下面进行简单的读取数据库操作进行测试:

package com.powercn;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class AlarmLevelServiceImplTest {
	private EntityManagerFactory emf;

    public EntityManagerFactory getEntityManagerFactory()
    {
        return emf;
    }

    @Before
    public void init()
    {
        emf = Persistence.createEntityManagerFactory("anyeye");
    }

    @After
    public void destroy()
    {
        emf.close();
    }
    
	@Test
	public void testListSimpleAlarmLog() {
		System.out.println(emf);
		EntityManager em = getEntityManagerFactory().createEntityManager();
		em.getTransaction().begin();
		String hql = "from AlarmLog as alarmLog";
		Query query = em.createQuery(hql);
		List results = query.getResultList();
		System.out.println(results);
	}
}


你可能感兴趣的:(Seam框架,搭建单元测试)