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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:
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

目录
相关文章
|
24天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
55 4
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
58 1
|
27天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
57 1
|
29天前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
27天前
|
Java 测试技术 API
软件测试中的自动化测试框架选择与应用##
在快速迭代的软件开发周期中,选择合适的自动化测试框架对于提高软件质量和开发效率至关重要。本文探讨了当前流行的几种自动化测试框架的特点和适用场景,旨在为软件开发团队提供决策依据。 ##
|
27天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
74 0
|
28天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
38 0
|
29天前
|
机器学习/深度学习 人工智能 安全
探索AI在软件工程中的最新应用:自动化测试与代码审查
探索AI在软件工程中的最新应用:自动化测试与代码审查