AspectJ 和模仿对象的测试灵活性:用“test-only”行为增强单元测试
2010-03-18 00:00:00 来源:WEB开发网模仿对象可以帮助您解决这种进退两难的局面。模仿对象测试用只用于测试的模仿实现来替代和域相关的东西。然而,这种策略的确在某些情况下带来了技术上的难题,比如远程系统上的单元测试。AspectJ 是 Java 语言的一种面向 aspect 的扩展,它允许我们在传统的面向对象方法失败的地方代之以 test-only 行为,从而用其它方法进行单元测试。
在本文中,我们将讨论一种编写单元测试既困难又合乎需要的常见情况。我们将从为一个基于 EJB 的应用程序的客户机组件运行单元测试开始。我们将使用这个示例作为出发点,来讨论在远程客户机对象上进行单元测试时可能出现的一些问题。为了解决这些问题,我们将开发两个新的依赖于 AspectJ 和模仿对象的测试配置。看到文章末尾时,您就应该对常见的单元测试问题和它们的解决方案有所了解,还应该初步了解 AspectJ 和模仿对象测试提供的一些有趣的可能性。
单元测试示例
示例由 EJB 客户机的一个测试组成。本案例研究中提出的很多问题都适用于调用 Web 服务的代码、调用 JDBC 的代码、甚至本通过虚包调用的本地应用程序“远程”部分的代码。
服务器端的 CustomerManager EJB 执行两种功能:它查找客户名并向远程系统注册新客户名。清单 1 展示了 CustomerManager 公开给客户机的接口:
清单 1. CustomerManager 的远程接口
public interface CustomerManager extends EJBObject {
/**
* Returns a String[] representing the names of customers in the system
* over a certain age.
*/
public String[] getCustomersOver(int ageInYears) throws RemoteException;
/**
* Registers a new customer with the system. If the customer already
* exists within the system, this method throws a NameExistsException.
*/
public void register(String name)
throws RemoteException, NameExistsException;
}
更多精彩
赞助商链接