博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit的基本使用
阅读量:5869 次
发布时间:2019-06-19

本文共 4257 字,大约阅读时间需要 14 分钟。

    一些关于单元测试的理念:

    单元测试并不能证明你的代码是正确的,只能证明你的代码是没有错误的。

    Keep bar green and keep your code cool

   关于JUnit的两种最基本的使用步骤

   第一种方式<4.0的JUnit版本

   1、 在已经编写好的项目中新建一个package用于单元测试。

   2、 要在buildpath中加入JUnit对应的包。

   3、 新建一个类,比如unitTest

   4、 当前的类需要继承Test类,需要导入一下的一些包:

       import static org.junit.Assert.*;

       import junit.framework.TestCase;

       import org.junit.Test;

   5、 编写自己的测试函数,可以编写多个,感觉上每个函数都相当于一个main方法,要注意的是需要用来执行的函数都要以test开头

   6、 在对应的测试类上点击Run as 之后点击JUnit Test 就可以执行对应的test开头的方法了。

   第二种方式>=4.0的JUnit版本

   1、 这种方式是基于注解来进行的,先要加上对应的包import org.junit.Test,其他的就不用加了。

   2、 类名不需要继承TestCase,测试方法也不需要以test开头。

   3、 只需要在方法的前面加上@Test的注解,之后 Run as—>JUnit test这样就会自动对加了注解的方法进行测试。

   使用注解的方式还是比较推荐的,最好在利用注解的时候方法名也能与之前的保持一致,这样就能与4.0版本之前的JUnit兼容了。

   这种方式的大致原理还是利用反射,先获得Class类实例,之后利用getMethods方法得到这个类的所有的方法,之后遍历这个方法,判断每个方法是否加上了@Test注解,如果加上了注解,就执行。大多数框架内部都是依靠反射来进行的。实际情况中还是比较推荐使用注解的,还有一些常用的注解,比如:@Before @After这两个分别表示方法(@Test之后的)执行之前要执行的部分,以及方法执行之后要执行的部分,注意这里每个被@Test标注过的方法在执行之前与执行之后都要执行@Before以及@After标注过的方法,因此被这两个注解标记过的方法可能会执行多次。

   对于@BeforeClass以及@AfterClass顾名思义就表示在整个测试类执行之前与执行之后要执行的方法,被这两个注解标记过的方法在整个类的测试过程中只是执行一次。

   还有一个常用到的方法是Assert.assertEquals方法,表示预期的结果是否与实际出现的结果是否一致,可以有三个参数,第一个参数表示不一致时候的报错信息,第二个参数表示期望的结果,第三个参数表示实际的结果。

   还有一部分是关于组合模式的使用,比如写了好多的测试类,ATest BTest ....总不能一个一个点,能一起让这些测试类都运行起来就是最好不过了,这时候要使用到两个注解:@RunWith(Suite.class)以及@SuiteClasses({ xxTest.class,xxTest.class })

   当然JUnit的整个过程中还涉及到了许多经典的设计模式,这个再进一步进行分析。

下面是一个实际的例子,展示一下常见的几个注解的使用:

 

//一个简单的Student类以及一个Teacher类 输出其基本信息package com.test.unittest;public class Student {    int id;    int age;    String name;            public Student(int id, int age, String name) {        super();        this.id = id;        this.age = age;        this.name = name;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }        public void info()    {        System.out.println("the stu info:"+this.age+" "+this.id+" "+this.name);    }}package com.test.unittest;public class Teacher {    String tname;    String tage;                public Teacher(String tname, String tage) {        super();        this.tname = tname;        this.tage = tage;    }    public String getTname() {        return tname;    }    public void setTname(String tname) {        this.tname = tname;    }    public String getTage() {        return tage;    }    public void setTage(String tage) {        this.tage = tage;    }        public void info(){        System.out.println("the teacher info:"+this.tage+" " +this.tname);    }}

 

      后面这部分就是对两个类进行的单元测试以及一个组合方式的使用

package com.Unittest;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.test.unittest.Student;public class StudentTest {        Student stu=new Student(1,23,"令狐冲");        @Before    public void setUp(){        System.out.println("Student Initial");    }        @Test    public void infoTest()    {        stu.info();    }        @After    public void tearDown(){        System.out.println("Student Destroy");    }}package com.Unittest;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.test.unittest.Teacher;public class TeacherTest {        Teacher teacher=new Teacher("风清扬","90");        @Before    public void setUp(){        System.out.println("Teacher Initial");    }        @Test    public void infoTest()    {        teacher.info();    }        @After    public void tearDown(){        System.out.println("Teacher Destroy");    }}package com.Unittest;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;import com.test.unittest.Student;@RunWith(Suite.class)@SuiteClasses({StudentTest.class,TeacherTest.class})public class AllTest {    }/*输出的结果如下:Student Initialthe stu info:23 1 令狐冲Student DestroyTeacher Initialthe teacher info:90 风清扬Teacher Destroy*/

 

 补充说明:

       写作业的时候把测试类一个一个手敲进去,真是太out了,还是用eclipse中自带的生成JUnit test的类比较好一点,直接在测试的那个package下面,创建一个新的JUnit Test Class 选定版本以及选定class under test 这个表示你希望生成哪一个类的测试类,这样生成的测试类中命名也比较规范,比如相同的方法名不同参数的方法,连参数类型都写上去了,比以前直接用a b c d...1 2 3 4。。。来区别同名的方法正规多了。。。

 

   

转载于:https://www.cnblogs.com/Goden/p/3958704.html

你可能感兴趣的文章
docker容器的两类存储
查看>>
HTML中input标签取消自动提示(不显示输入历史记录)
查看>>
POJ 1204 Word Puzzles(字典树+搜索)
查看>>
Map的常用方法
查看>>
gridview展开嵌套显示
查看>>
最大子矩阵
查看>>
《算法导论》读书笔记--第二章 2.1 插入排序
查看>>
vue滚动
查看>>
Clean Code – Chapter 3: Functions
查看>>
113. Path Sum II
查看>>
Spring Cloud系列文,Feign整合Ribbon和Hysrix
查看>>
openstack API debug OpenstackEveryProject_CLI,curl_based
查看>>
linux系统瓶颈分析(精)
查看>>
JSON关联属性转换异常
查看>>
Javascript的delete
查看>>
c# asp.net 新建项目与新建网站区别
查看>>
gdb server调试步骤
查看>>
Unable to update index for central
查看>>
Polly一种.NET弹性和瞬态故障处理库(重试策略、断路器、超时、隔板隔离、缓存、回退、策略包装)...
查看>>
数据库事务
查看>>