2009-09-29 61 views
6

我正在寻找一种将TDD应用于会话Bean的方法。单元测试EJB

任何人都可以提供意见和链接如何进行单元测试?

如何使用JUnit来做到这一点?

P.S:我是新来的测试驱动开发和会话Bean。

我正在使用EJB v2。

回答

8

我假设你在谈论EJB2.x会话Bean。对于这些动物,我喜欢做的是:

  • 使用会话Bean作为一个包装器,它只是将逻辑委托给一个POJO,您可以在一个容器之外轻松地进行测试。外容器内测试是更好,更快,更方便等,但不包括的东西,如部署描述符验证- 和/或 -
  • 使用类似Cactus的容器内测试(检查Howto EJB文档)- 和/或 -
  • 构建和部署用于集成测试的Cargo的EJB模块。
+0

+1 - 为了您的最后两个建议,我已经很多年没有想过仙人掌。:) – 2009-09-29 15:09:08

+0

其实,我没有使用仙人掌多年:) – 2009-09-29 16:10:43

+0

我试图设置使用仙人掌,但我真的不明白!我觉得安装太困难了。我正在使用Eclipse和NetBeans。 – Attilah 2009-10-01 14:03:06

5

你不说你正在使用哪个版本的EJB。如果是EJB v3,请查看Ejb3Unit。从网站:

Ejb3Unit是一个JUnit的推广与能够执行自动的独立的JUnit测试 所有EJB 3.0符合Java EE的 项目。 由于容器测试方法的不足导致构建测试周期变短,因为不再需要容器部署,因此不再需要 。

不过,我会主张从EJB特有的功能中分离出来。这将允许您测试容器外的复杂功能,而不使用上述框架。大部分测试将测试POJO(普通的旧Java对象),而相对较少的测试将专注于持久性框架测试。

编辑:所以,如果你使用EJB V2,那么显然忽略第一点。然而,第二点仍然有效。

2

我目前使用apache openejb作为单元测试的嵌入式容器。虽然这是一个EJB3/JPA项目,但它对EJB2应该是一样的。为了引导容器在测试中,你只需要创建以后可以用它来查找EJB和数据源的InitialContext对象:

Properties props = new Properties(); 
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); 

// a DataSource named "mysql" 
props.put("mysql", "new://Resource?type=DataSource"); 
props.put("mysql.JdbcDriver", "com.mysql.jdbc.Driver"); 
props.put("mysql.JdbcUrl", "jdbc:mysql://localhost:3306"); 
props.put("mysql.JtaManaged", "true"); 
props.put("mysql.DefaultAutoCommit", "false"); 
props.put("mysql.UserName", "root"); 
props.put("mysql.Password", "root"); 

Context context = new InitialContext(props); 
LocalInterface local = (LocalInterface)context.lookup(localInterfaceName + "BeanLocal"); 
DataSource ds = (DataSource)context.lookup("java:openejb/Resource/mysql"); 

编辑:有在“测试技术”部分更多的文档以http://openejb.apache.org/3.0/index.html

+0

你能否给我提供一个关于此教程的好教程的链接?似乎很有希望 – Attilah 2009-10-01 14:09:07