WEB开发网
开发学院软件开发Java AspectJ 和模仿对象的测试灵活性:用“test-only”... 阅读

AspectJ 和模仿对象的测试灵活性:用“test-only”行为增强单元测试

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 模仿对象可以帮助您解决这种进退两难的局面,模仿对象测试用只用于测试的模仿实现来替代和域相关的东西,AspectJ 和模仿对象的测试灵活性:用“test-only”行为增强单元测试(2),然而,这种策略的确在某些情况下带来了技术上的难题,单元测试示例示例由 EJB 客户机的一个测试组成,本案例研究

模仿对象可以帮助您解决这种进退两难的局面。模仿对象测试用只用于测试的模仿实现来替代和域相关的东西。然而,这种策略的确在某些情况下带来了技术上的难题,比如远程系统上的单元测试。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; 
} 

上一页  1 2 3 4 5 6 7  下一页

Tags:AspectJ 模仿 对象

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接