UML之轻松入门(2)-掌握Junit,让我们的开发更高效

使用UML不仅可以形象化的表达我们的程序思想,而且可以帮助我们提高程序的质量。一个杂乱无章的程序让维护者望而生畏,其成本也可想而知。在面向程序设计(OOD)中有5条原则是帮助我们设计一个高效、简洁的程序:1.单一职责原则(SRP) 2.开放-闭合原则(OCP) 3.Liskov替换原则(LSP)
4.依存关系倒置原则(DIP) 5.接口隔离原则(ISP).
然而这5个原则不是本节讨论的重点,我们将从一个更简单基础的部分入手-JUnit。

想象一下如果程序中每增加一个功能或修改一些代码,都需要整个程序作支持,那这个开发过程将显得多么繁琐。这样的代码也必然不符合OCP原则,因此我们可以利用Junit来创建单元测试来验证我们的代码是否合理。本文将从以下4个方面讨论JUnit的用法:1.JUnit的配置
2.
JUnit的使用 3.断言(assert的用法) 4.Test的用法 5.其他的要点

 1.Junit的配置

在集成开发工具IDE如eclipse中集成了JUnit,在其它开发工具中需导入Junit包,下面我们演示如何在MyEclipse中添加JUnit测试:

从图我们可以看出我们有一个名为LearnJunit的项目,下面有一个com.junit.dome的包,包里就只有一个方法:abs();用来求一个给定整数的绝对值。接下来我们将以此为例,展示如何在MyEclipse中添加JUnit并测试abs()方法。

我们的操作流程是这样的:右键单击项目 ——> NEW ——> JUnit Test Case

在弹出的对话框中,我们需要填入包名和类名以及需要测试的类的名称。这里,我们创建一个com.junit.test包,创建一个JunitTest类并舍者需要测试的类为com.junit.demo.JUnit01来进行测试。同时MyEclipse会自动为我们添加相应的JAR包。

在这里我们就完成了对JUnit的配置工作。

   2.Junit的使用

使用JUnit的一般步骤为:1.准备测试条件并未测试分配资源 2.设置断言并进行测试 3.清除回收各种资源

public class JunitTest
{

//在这里进行变量的声明

Junit01 testJunit01;

@Before

public void setUp() throws Exception
{

//在这里进行实例化

testJunit01 = new Junit01();

}

@After

public void tearDown() throws Exception
{

//着这里进行各种资源的回收

testJunit01 = null;

}

@Test

public void test()
{

//在这里进行各种测试

assertEquals(-2,testJunit01.abs(-2));

}

}

我们单击右键 ——> Run As ——> JUnit Test.系统将自动为我们准备@Before中的环境,并运行@Test中的测试。进度条为绿,则说明测试通过。进度条为红,则可能为Failure,也可能为Error。前者则说明assertEquals设置的断言有误,代码本身没错,我们只需要检查逻辑。后者则说明代码本身有错误,存在异常。

3.断言(assert的用法)

JUnit中提供了大量断言,它表示方法运行后的值是否满足我们的期望。断言的用法大同小异,下面我们列举一些常用的断言:

assertEquals                    要注意相应类型的精度范围

assertNull,assertSame   是否引用的同一个对象

assertTrue , assertFail      常用在不可能到达的地方,如捕获异常后

4.Test的用法

在JUnit 4之前,JUnit一直是运用反射机制如testXXX来寻找需要测试的方法。JUnit 4引入了注解模式,只需要在方法名称前加上@Test  注解即表示此为测试方法而无需在意方法的名称。@Before  和@After 用法相似。

这里的@Test 还有两种用法,即可以传递两个参数:1.experted 2.timeout

expected

表示期望捕获的异常,如果没有捕获异常或者捕获的异常并不是期望的,都会产生Failure。例如:

@Test(expected=IndexOutOfBoundsException. class)

public void test()
{

//在这里进行各种测试

new ArrayList<>().get(2);

}

这里必然会引起IndexOutOfBoundsException,因此测试成功。

timeout

表示方法执行的毫秒数,超过设置的值就会产生Failure。例如

@Test(timeout=1000)

public void test()
{

//在这里进行各种测试

whiletrue){}

}

5.其他的要点

关于setUp()和tearDown()调用次数的问题:

public class JunitTest
{

//在这里进行变量的声明

@Before

public void setUp() throws Exception
{

//在这里进行实例化

System. out.println( "setUp");

}

@After

public void tearDown() throws Exception
{

//着这里进行各种资源的回收

System. out.println( "tearDown");

}

@Test

public void test01()
{

//在这里进行各种测试

}

@Test

public void test02()
{

//在这里进行各种测试

}

}

结果输出了两次"setUp","tearDown"。这说明每设置一个测试用例都会调用一次setUp()和tearDown()。

时间: 2024-10-26 20:52:08

UML之轻松入门(2)-掌握Junit,让我们的开发更高效的相关文章

UML之轻松入门(4)-OCP做一个上进的厨子

在上一章节,我们讨论了面向对象设计(OOD)5大特性之一的SRP原则.这一节,我们来看另一重要的原则:OCP原则(开放-闭合原则). Software entity should be open for extension, but closed for modification  上节回顾: 1.UML之轻松入门(1)-类图(附:java Comparable接口与Comparator接口用法) http://blog.csdn.net/woyunowuyuda/article/details

UML之轻松入门(3)-SRP做好厨子,让别人编程去吧

一个厨子可以做出一手好菜,也许他是新东方毕业的或者是祖传秘方.你让他做上一桌佳肴那是简单.快乐而又高效的,然而让他编程就会成为一种苦恼并且让人想不通的一件事.也许这个比喻不是很恰当,但是对于每个类来说,他们就像一个一个的actor,也许是厨子也许是司机,他们应该关注于自己的领域,这样会更加高效而且简明.源于这一思想,我们发现了SRP这个原则,即:单一职责原则. There should never be more than one reason for a class to change  既然

UML之轻松入门(1)-类图

曾经看到过一篇blog,上面探讨了学习UML和学习设计模式的区别,同时提出了学习UML还不如学习设计模式的观点.自我感受是,UML和设计模式在本质上属于完全不同的两个方向.设计模式是一种被反复使用.多数人知晓的.代码设计经验的总结.它可以更容易让人理解而且保证了代码的可靠性,而UML则是一种模型化和可视化的一种语言.可以这么说,设计模式是一种方法,它让我们的代码更有层次感 .而UML则是一种表达,它让我们的代码更加形象化.通过UML我们不必太过关注代码,不必担心客户是否了解相关的语言知识,整体的

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina等网页的小demo,如果对swift的语法不感兴趣的同学可以直接跳到第二部分来感受下Swift的魅力-(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing) 一.Swift常用语法 Swift是Apple去年推出的一门新的语言,基于C和Objective-C,而没有C的一些兼容约束,它采用了安全的编程模式和添加现代的功能

UML建模快速入门00 Outline

Preface UML建模,其重要性不言而喻,本人虽然大学期间就早已知其大名,无奈因各种因素总是拿起又放下,未能持续研究,几经断断续续,一直未持续深入读完一本书.最近越发觉得逆向工程(由代码生成UML)在日常整理中的重要性及方便性,便又捡起书本,觉得应该好好看看,边看边画,对很多概念又有了较深入的理解,对以前模糊的概念更加明晰些了.说实在的,这次拿起书本来看,主要有两个原因:一是觉得UML建模确实应该作为码工具备的一个技能,二是为了提升下逼格. 为了记录个人历经的路程,后续将推出系列快速入门读书

JavaScript面向对象轻松入门之封装(demo by ES5、ES6、TypeScript)

本章默认大家已经看过作者的前一篇文章 <JavaScript面向对象轻松入门之抽象> 为什么要封装? 封装(Encapsulation)就是把对象的内部属性和方法隐藏起来,外部代码访问该对象只能通过特定的接口访问,这也是面向接口编程思想的一部分. 封装是面向对象编程里非常重要的一部分,让我们来看看没有封装的代码是什么样的: 1 function Dog(){ 2 this.hairColor = '白色';//string 3 this.breed = '贵宾';//string 4 this

C++ STL编程轻松入门

 图1.STL和c++标准模板库 作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情. 1. "什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清楚,也决非易事.因此,如果你在看完本节之后还是觉得似懂非懂,

MongoDB游记之轻松入门到进阶》代码下载

<MongoDB游记之轻松入门到进阶>代码下载,看看有没有用 http://pan.baidu.com/s/1boKG28R https://item.jd.com/12236244.html MongoDB作为最受欢迎的文档存储类型的NoSQL数据库,越来越多的公司在使用它.本书以符合初学者的思维方式,系统全面.层层递进地介绍了MongoDB数据库,通过本书的学习,读者能够胜任实际工作环境中MongoDB的相关开发管理工作. 本书共分四个部分23章,第一部分讲解了MongoDB的相关概念和原

ARKit从入门到精通(11)-ARKit开发常见问题及解决方案

转载请注明出处:ARKit从入门到精通(11)-ARKit开发常见问题及解决方案 本文主要介绍ARKit开发过程中一些常见问题 1.ARKit框架无法导入问题 2.ARKit运行黑屏或者白屏问题:Unable to run the session, configuration is not supported on this device: <ARWorldTrackingSessionConfiguration 3.ARKit添加虚拟物体无法显示问题:ARSession不支持打断点 1.1-A