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

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

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: 幸运的是,AspectJ 提供了一个折衷方法,AspectJ 和模仿对象的测试灵活性:用“test-only”行为增强单元测试(10),AspectJ 增加灵活性AspectJ 能够在“每测试案例”的基础上提供对上下文敏感的行为修改(甚至在通常会禁止使用模仿对象的情况下)

幸运的是,AspectJ 提供了一个折衷方法。

AspectJ 增加灵活性

AspectJ 能够在“每测试案例”的基础上提供对上下文敏感的行为修改(甚至在通常会禁止使用模仿对象的情况下)。AspectJ 的联接点模型允许名为 aspect的模块识别程序的执行点(比如从 JNDI 上下文查找对象),并定义执行这些点的代码(比如返回模仿对象,而不是继续查找)。

aspect 通过 pointcut识别程序控制流程中的点。pointcut 在程序的执行(在 AspectJ 用语中称为 joinpoint)中选取一些点,并允许 aspect 定义运行与这些 jointpoint 有关的代码。有了简单的 pointcut,我们就可以选择所有参数符合特定特征的 JNDI 查找了。但是不管我们做什么,都必须确保测试 aspect 只影响在测试代码中出现的查找。为了实现这一点,我们可以使用 cflow() pointcut。 cflow 选出程序的所有在另一个 joinpoint 上下文中出现的执行点。

下面的代码片段展示了如何修改示例应用程序来使用基于 cflow 的 pointcut。

pointcut inTest() : execution(public void ClientBeanTest.test*()); 
/*then, later*/ cflow(inTest()) && //other conditions 

这几行定义了测试上下文。第一行为 ClientBeanTest 类中什么也不返回、拥有公共访问权并以 test 一词开头的所有方法执行的集合起名为 inTest() 。表达式 cflow(inTest()) 选出在这样的方法执行和其返回之间出现的所有 joinpoint。所以, cflow(inTest()) 的意思就是“当 ClientBeanTest 中的测试方法执行时”。

样本应用程序的测试组可以在两个不同的配置中构建,每一种使用不同的 aspect 。第一个配置用模仿对象替换真正的 CustomerManager 。第二个配置不替换对象,但选择性地替换 ClientBean 对 EJB 组件作出的调用。在两种情况下,aspect 管理表示,同时确保客户从 CustomerManager 接收到可预知的结果。通过检查这些结果, ClientBeanTest 可以确保客户机正确使用 EJB 组件。

上一页  5 6 7 8 9 10 

Tags:AspectJ 模仿 对象

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