Dmy*_*kov 5 java testing junit
我有一个生命周期问题,用JUnit做一些测试套件.
为了编写方便的JPA 2.0单元测试作为Java开发人员,我想:
我一直在写JUnit测试.但在这种情况下,我对列表中的第二个和第三个项目有疑问.
请查看以下测试套件示例:
抽象测试套件:
public abstract class AbstractPersistenceTest {
protected static EntityManagerFactory emf;
protected EntityManager em;
@BeforeClass
public static void setUpClass() {
emf = Persistence.createEntityManagerFactory("test");
}
@Before
public void setUp() {
em = emf.createEntityManager();
em.getTransaction().begin();
}
@After
public void tearDown() {
em.getTransaction().rollback();
em.close();
}
@AfterClass
public static void tearDownClass() {
emf.close();
}
}
Run Code Online (Sandbox Code Playgroud)
派生测试套件:
public class EmployeeJpqlTest extends AbstractPersistenceTest {
private Employee john;
private Employee jack;
@Before
public void setUp() {
john = new Employee("John Doe", 1000);
jack = new Employee("Jack Line", 1010);
em.persist(john);
em.persist(jack);
}
@Test
public void itShouldRetrieveAllEmplloyees() {
TypedQuery<Employee> query = em.createQuery("SELECT e FROM Employee e",
Employee.class);
List<Employee> employees = query.getResultList();
assertArrayEquals(new Employee[] { john, jack }, employees.toArray());
}
@Test
public void itShoulRetrieveAllEmployeeNames() {
TypedQuery<String> query = em.createQuery(
"SELECT e.name FROM Employee e", String.class);
List<String> names = query.getResultList();
assertArrayEquals(new String[] { john.getName(), jack.getName() },
names.toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
由于JUnit生命周期注释的未指定顺序,NullPointerException在派生类的setUp()方法中占有一席之地.这对我来说很清楚.
是否有可能在没有手动注入任何派生测试套件类的每个setUp()/ tearDown()方法中的启动/回滚事务代码的情况下获得目标?或者,是否有一个替代JUnit意味着或测试框架可以提供一种简单的方式来表达我的需求?
提前致谢.
您如何看待使用Google Guice将实体管理器和事务注入到您的测试方法中的想法?
import com.google.inject.persist.Transactional;
import javax.persistence.EntityManager;
public class MyTest {
@Inject EntityManager em;
@Test
@Transactional
public void createNewPerson() {
em.persist(new Person(...));
}
}
Run Code Online (Sandbox Code Playgroud)
它可以简化这方面的大量工作。
| 归档时间: |
|
| 查看次数: |
5618 次 |
| 最近记录: |