PicoContainer(Ioc容器)在测试用例中的应用(一)

简介:
PicoContainer是一个轻量级Ioc(Inversion of Control)容器, 最重要的特征是它的尺寸,它没有拦截器、AOP 或相似类型的服务,但它具有完整的依赖注入容器。 PicoContainer 支持 Java 配置技术,而不支持 XML 配置技术,也就是说容器内各组件的依赖规则都是通过java程序来配置的。
为什么要使用ioc容器
话说第一天我们要完成一个数据库的读测试,读的行为分别为顺序和随机。按照传统的做法我们会写两个case分别实现顺序读和随机读过程,很简单我们一会就完成了。第二天我们需要完成一个写测试,同样有两个行为:顺序、随机。我们用同样的方法写了顺序写和随机写两个case。第三天我们要完成一个读写混合测试,老板要求顺序随机的行为都需要覆盖到,悲催得我们难道要把读写行为来个排列组合?现实就是这样,随着读写场景的越来越复杂我们发现我们把同样的准备数据、写入数据、读取数据、删除数据这个过程完成n遍。case越来越多越来越复杂,突然有一天开发把读写接口重构了=。=!……
显然,做为一个立志不做2青年的同学,我们有很多办法来避免这种情况的发生。其中就有我们的PicoContainer。下面笔者就一步一步介绍它是怎么来帮我们的做到的。
PicoContainer有什么用

Ioc的概念大家都很清楚,下面笔者用读写的这个实例来介绍下使用Ioc容器如何来构建我们的测试用例。

1、分析测试用例
回到上面那个场景,经过我们的分析发现不管是怎样的读写行为用例的要完成过程都是一样:准备环境、写入数据、读取数据、判断结果、清理环境。于是我们把这个过程抽象出来,先不要管他具体需要怎么的读写行为,先把过程完成了。

2、抽象接口
有了过程的抽象,我们发现很有必要创建两个接口Reader和Writer,有了这两个接口,我们就可以完成我们的case脚本。

public interface Reader {
  public void read();
}

public interface Writer {
  public void write();
}

public class TestWriteAndRead extends TestCase {
  protected Writer writer;
  protected Reader reader;
  public void setUp() {
    // 准备环境
  }

  public void test() {
    // 写入数据
    writer.write();
    // 读取数据
    reader.read();
    // 判断结果
  }

  public void tearDown() {
    // 清理环境
  }
}

3、实现接口
要想测试脚本能够运行,还必须有具体的读写行为。于是我们还需要实现Reader和Writer接口,于是我们完成了RandomRead和RandomWrite两个具体的读写类。

public class RandomReader implements Reader {
  public void read() { 
  // 随机读取数据 



public class RandomWriter implements Writer { 
  public void write() { 
  // 随机写入数据 

}

4、使用PicoContainer组装用例
有了读写测试过程,有了随机读写的实现,我们如何将这两者组合起来变成一个能够跑起来的用例呢?ok,我们的主角PicoContainer上场了。PicoContainer在这里的作用就像一个池子一样,我们把测试过程和测试过程中所需要使用的组件都放到这个池子里面,他们之间通过接口的实现关系自己来实现组装。于是我们可以在不同的池子中扔进去不同的组件,这些组件都可以跑在相同的测试过程中。下面我们利用PicoContainer的inject功能来实现用例。

在TestWriteAndRead类中添加PicoContainer
public class TestWriteAndRead extends TestCase {

  protected Writer writer; 
  protected Reader reader; 
  protected PicoContainer pico; 

  public void setUp() { 
    // 准备环境 
  

  public void test() { 
    // 写入数据 
    // 从容器中取出组件 
    writer = pico.getComponent(Writer.class);         
    writer.write(); 
     
    // 读取数据 
    reader = pico.getComponent(Reader.class); 
    reader.read(); 
     
    // 判断结果 
  

  public void tearDown() { 
    // 清理环境 
  
}

5、建立随机读写的测试脚本

public class TestRandomWriteAndRead extends TestWriteAndRead {
  public TestRandomWriteAndRead() { 
    // 建立PicoContainer容器并放入组件 
    pico = new DefaultPicoContainer(); 
    pico.addComponent(RandomReader.class); 
    pico.addComponent(RandomWriter.class); 
  
}
到这里用例就完成了,有了PicoContainer编写测试用例就像搭积木一样,不管有多少的读写行为我们只需要实现它并在用例中对他们进行组装就可以了。被测程序的变更也仅仅只影响到具体的实现类,维护脚本变得非常方便。
PicoContainer还有什么功能

PicoContainer提供了我们最常用依赖注入功能,比如构造函数注入、annotation注入等等,还提供了容器内类的生命周期管理,基本涵盖和满足了测试用例编写的需要。下一篇文章笔者会仔细的介绍PicoContainer常用的功能,敬请期待。


来源:http://www.taobaotest.com/blogs/2019

目录
相关文章
|
9月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1268 108
|
9月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
402 6
|
9月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
7月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
779 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
7月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
10月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
612 59
|
8月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
1054 11
|
10月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
452 1
|
9月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
9月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
1323 0