可以使用 EJB 测试模式来帮助您完成测试 EJB 这一过程。这些测试模式包括 EJB 生命周期测试模式、EJB 业务逻辑测试模式和 EJB 会话外观测试模式。
借助“为 EJB 创建测试”向导,可以通过 EJB 的远程接口(远程接口和 home 接口)来远程测试 EJB,也可以通过 EJB 的本地接口(本地接口和 home 接口)来本地测试 EJB。当在本地进行测试时,是在被测 EJB 所在的应用程序服务器上部署测试的。
使用 EJB 生命周期测试模式来为验证 EJB 的生命周期方法而创建测试(创建新的 bean、除去 bean 和查找 bean)。对于在本地 home 或 home 接口中发布的每个生命周期方法,EJB 的 bean 类都包含一个定义其实现的相应的回调方法。例如,对于 home 接口中的每个 create 方法,在 bean 类中都具有相应的 ejbCreate 方法。
生命周期模式通过模拟可能会使回调失败的几种方案来帮助您测试回调方法。对于有状态会话 bean 和实体 bean,此测试模式还检查 bean 的状态是否正确。生命周期测试模式的一个用途是测试 bean 类中字段的值。要测试这些值,应在测试数据表中提供有意义的数据。
生命周期模式自动为每种类型 bean 的期望方案生成测试代码,从而简化了您在测试 EJB 时的任务。
要使用生命周期测试模式来测试无状态会话 bean,生成代码来测试在 EJB 的 bean 类中实现的 ejbCreate() 和 ejbRemove() 回调方法。测试了下列回调方法:
包括下列测试方案:
要使用生命周期测试模式来测试有状态会话 bean,除了生成代码来测试 ejbCreate() 和 ejbRemove() 以外,还生成代码来测试 bean 的状态。测试了下列回调方法:
包括下列测试方案:
要使用生命周期测试模式来测试实体 bean,必须生成更多代码来测试持久性和数据库查询。测试了下列回调方法:
包括下列测试方案:
使用 EJB 业务逻辑测试模式来验证业务逻辑。尽管实体 bean 中有时候也可能会包含业务逻辑,但是,业务逻辑通常是在会话 bean 中实现的。务必测试业务逻辑本身(即,用来处理参数中的数据的算法)。另外,使用测试数据表来对大量输入数据执行由数据驱动的测试。
使用 EJB 会话外观测试模式来测试会话外观设计模式的实现。此设计模式用来提供更高级别的业务逻辑接口,以便对客户机隐藏应用程序的复杂性并提高性能。会话外观设计模式是人们熟知的 J2SE 外观模式的 EJB 版本。会话外观测试模式通常用来测试调用本地实体 bean 的会话 bean。会话外观测试模式为会话 bean 和子系统(通常是实体 bean)中被会话外观调用的那些方法生成测试。测试向导页允许您选择 EJB(通常是会话 bean)并在 EJB 的业务接口中选择一组方法。
例如,以包含三个 EJB 的子系统为例:
TransferFunds EJB 包含 transferFunds 方法,如以下代码中所示:
public void transferFunds(String accountId1, String accountId2, int amount){ BankAccountHome bankAccountHome=getHome("",...); BankAccount bankAccount=bankAccountHome.findByPrimaryKey(accountId1); CardAccountHome cardAccountHome=getHome("",...); CardAccountHome cardAccountHome=getHome("",...); CardAccount cardAccount=cardAccountHome.findByPrimaryKey(accountId2); bankAccount.withDraw(amount); cardAccount.deposit(amount); }
transferFunds 方法调用下列方法:
在此示例中,TransferFunds EJB 是外观,而被测子系统由 BankAccount 和 CardAccount EJB 组成。可以使用“创建测试”向导来为外观中的方法和子系统中被外观调用的那些方法生成测试:两个 findByPrimaryKey 方法以及 withDraw 和 deposit。