`
luogankun
  • 浏览: 19436 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

junit设计模式分析一(命令模式)

阅读更多

命令模式:

一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求进行排队或记录请求日志...

Command模式告诉我们可以为一个操作(方法)生成一个对象并给出它的一个"execute(执行)"方法。

 

注意:这里都是一个。

 

命令模式的构成:

1、客户角色  : 创建一个具体命令对象,并确定其接收者

2、命令角色 : 声明一个给所有具体命令类的抽象接口。这是一个抽象角色,通常由一个接口或抽象类实现

3、具体角色 : 定义一个接收者和行为之间的弱耦合,实现execute方法,负责调用接收者的相应操作

4、请求者角色 : 负责调用命令对象执行请求

5、接收者角色 : 负责具体实施和执行一个请求

 

通过一个类比来方便我们的记忆:

当我们去饭店吃饭,点菜的时候,点菜就是一个命令,命令并不会自己去完成,而是有一个具体的接收者去完成的,点菜以后具体的实施是由厨师去完成的,那么厨师就是一个接收者,所以命令中要持有一个厨师的引用,而厨师并不依赖任何其他的对象。

 

代码实现:

 

命令的接口:

public interface Command {     
	public void doCommand();  //点菜
}

 

命令的实现:

public class ConcreteCommand implements Command {
	private Receiver receiver;  //接收者,在这里是厨师
	
	public ConcreteCommand(Receiver receiver) {
		this.receiver = receiver;
	}

	public void doCommand() {
		receiver.doAction();
	}
}

 

接收者(厨师):

public class Receiver {   //不依赖于其他任何的对象
	public void doAction() {
		System.out.println("do action");
	}
}

 

请求者(客户端):

public class Client {
	public static void main(String[] args) {
		Receiver receiver = new Receiver();
		Command command = new ConcreteCommand(receiver);
		command.doCommand();
	}
}

 

 

 

对应于junit3.8中的代码实现

在junit3.8中定义了Test接口

public interface Test {
	/**
	 * Counts the number of test cases that will be run by this test.
	 */
	public abstract int countTestCases();
	/**
	 * Runs a test and collects its result in a TestResult instance.
	 */
	public abstract void run(TestResult result);
}

 这里的Test接口就是Command的接口run方法就是command中的doAction方法

TestCase是Test接口的抽象实现。它增加了一个测试名称属性,因为每一个TestCase在创建时都要有一个名称,如果一个测试失败了,便可识别出是哪个测试失败。

public abstract class TestCase extends Assert implements Test {
	/**
	 * the name of the test case
	 */
	private String fName;

                public void run(TestResult result) {
		result.run(this);
	}
}

 这样测试人员,编写测试用例时,只需继承TestCase,来完成run方法即可,然后JUnit获得测试用例的请求,执行它的run方法,把测试结果记录在TestResult之中,目前可以暂且这样理解。

 

 

效果:
下面来考虑经过使用Command模式后给系统的架构带来了那些效果:
1、Command模式将实现请求的一方(TestCase开发)和调用一方(JUnit )进行解藕

2、Command模式使新的TestCase很容易加入,无需改变已有的类,只需继承TestCase类即可,这样方便了测试人员
3、Command模式可以将多个TestCase进行组合成一个复合命令,你将看到TestSuit就是它的复合命令,当然它使用了Composite模式
4、Command模式容易把请求的TestCase组合成请求队列,这样使接收请求的一方(Junit Fromwork),容易决定是否执行请求,一旦发现测试用例失败或者错误可以立刻停止进行报告
5、Command模式可以在需要的情况下,方便实现对请求的Undo和Redo,以及记录Log,这部分目前在JUnit中还没有实现,将来是很容易加入的。

 

缺点:

由于命令模式只能为一个操作(方法)生成一个对象并给出它的一个"execute(执行)"方法。

所以:10个操作就要生成10个对象,会造成类的膨胀的!!!而且没个类中只能有一个方法,然后由接收者去执行这个方法。

 

 所以在Junit3.8框架中就引入了适配器模式,将在后文中详细阐述!

 

分享到:
评论

相关推荐

    JUnit设计模式分析

    总之,JUnit的设计模式分析展示了如何将经典设计模式融入实际项目中,以达到简化代码、增强可维护性和提高代码复用性的目的。理解这些模式及其在JUnit中的应用,对于提升Java测试能力及软件开发实践具有重要意义。

    Junit设计模式分析.docx

    本文将对 JUnit 设计模式进行深入分析,探讨 JUnit 中的设计模式应用,了解 JUnit 是如何使用设计模式来实现测试框架的。 一、JUnit 概述 JUnit 是一个优秀的 Java 单元测试框架,由 Erich Gamma 和 Kent Beck ...

    Junit设计模式分析

    《JUnit设计模式分析》 JUnit,作为Java编程语言中最常用的一款单元测试框架,深受开发者喜爱。它简洁易用,能够帮助我们快速编写测试代码,确保软件功能的正确性。本分析将深入探讨JUnit中的设计模式,揭示其内在...

    JUNIT设计模式分析PPT

    ### JUNIT设计模式分析 #### 1. JUnit概述 ##### 1.1 JUnit简介 JUnit是一个开源的Java测试框架,属于XUnit家族的一员。它由Erich Gamma和Kent Beck共同开发完成,旨在简化Java应用程序的单元测试过程。JUnit在...

    Junit设计模式应用

    《Junit设计模式应用》是基于作者业余时间的翻译成果,旨在通过设计模式的角度深入剖析JUnit的内在原理,以此促进读者对单元测试框架理解和运用能力的提升。设计模式是软件工程中的宝贵经验总结,它为解决常见问题...

    junit源码以及牵涉到的设计模式

    ### JUnit源码及其涉及的设计模式 #### 一、引言 JUnit作为一款广泛应用于Java项目的单元测试框架,其设计理念和实现方式对于软件开发者来说具有很高的学习价值。本文将深入探讨JUnit源码,并重点关注其中使用的...

    Junit所使用的设计模式.doc

    本文将深入探讨JUnit中应用到的两种主要设计模式:适配器模式和命令模式。 首先,适配器模式在JUnit中的应用主要体现在对接不同接口或类的能力上。适配器模式允许不兼容的类协同工作,通过将旧的或不兼容的接口转换...

    Junit测试案例使用

    7. Junit 架构:Junit 本身是围绕着两个设计模式来设计的:命令模式和集成模式。 8. 命令模式:利用 TestCase 定义一个子类,在这个子类中生成一个被测试的对象,编写代码检测某个方法被调用后对象的状态与预期的...

    Java23个设计模式简单示例

    15. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。Command模式可能有Command、Invoker和Receiver类。 16. **解释器模式**...

    JAVA单元测试JUnit

    综上所述,JUnit不仅仅是一个单元测试工具,更是设计模式在实践中的典范,展示了模式如何优化代码结构、提高软件质量。对于开发者而言,深入理解JUnit及其背后的设计哲学,不仅能够提升测试技能,还能深化对软件工程...

    JAVA基础入门及设计模式教程下载

    通过学习上述知识点,你可以逐步掌握Java编程的基础,并理解如何在实际项目中应用设计模式,编写出高效、易维护的Java程序。不断练习和实践是提升编程技能的关键。记得阅读提供的教程,如"Java私塾基础入门教程"和...

    JUnit入门,非常实用!

    - 设计模式:基于命令模式和复合模式,易于扩展和维护。 - 免费开源:降低了使用成本。 然而,JUnit 也有一些不足: - 测试数据与测试代码耦合:不利于数据隔离和复用。 - 无法直接测试GUI组件、JSP或HTML。 - ...

    algorithms for studying or using 设计模式,算法等的java实现.zip

    设计模式分为三大类:创建型模式(如单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式)、结构型模式(如代理模式、装饰器模式、适配器模式、桥接模式、组合模式、外观模式、享元模式)和行为型模式(如观察...

    提出问题,解答问题!这才是理解代码设计的正确方法.doc

    例如,在 JUnit 中,使用了命令模式、装饰模式和观察者模式等设计模式。 9. 代码设计的思考过程:通过本文,我们可以看到代码设计的思考过程。我们需要思考为什么要使用某种设计模式,为什么要使用某种实现方式等...

    junit-test-dao

    - **定义**:DAO是一种设计模式,用于封装对数据库的访问操作,将业务逻辑与数据访问逻辑分离。 - **作用**:提高代码的可维护性和可扩展性,简化业务逻辑层的代码。 **2. 单元测试挑战** - **依赖问题**:DAO...

    patternsMaze:简单的迷宫与设计模式说明

    本项目"patternsMaze"聚焦于如何通过设计模式来创建一个简单的迷宫生成器,主要使用了Java语言。以下是对该项目中涉及的知识点的详细解释: 1. **设计模式的基本概念**: 设计模式并非具体的代码或库,而是一种在...

    Android設計招式之美

    3. 行为型设计模式:如观察者模式、命令模式、责任链模式、迭代器模式、访问者模式、备忘录模式、解释器模式等,这些模式关注于对象之间的交互和行为。 二、Android特定设计模式 1. MVP(Model-View-Presenter)...

Global site tag (gtag.js) - Google Analytics