junit测试用例和测试套件的简单使用

 

JUnit - 概述

所谓单元测试是测试应用程序的功能是否能够按需要正常运行,并且确保是在开发人员的水平上,单元测试生成图片。单元测试是一个对单一实体(类或方法)的测试。单元测试是每个软件公司提高产品质量、满足客户需求的重要环节。

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。

JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。

特点:

  • JUnit 是一个开放的资源框架,用于编写和运行测试。 
  • 提供注释来识别测试方法。 
  • 提供断言来测试预期结果。 
  • 提供测试运行来运行测试。 
  • JUnit 测试允许你编写代码更快,并能提高质量。 
  • JUnit 优雅简洁。没那么复杂,花费时间较少。
  • JUnit 测试可以自动运行并且检查自身结果并提供即时反馈。所以也没有必要人工梳理测试结果的报告。
  • JUnit 测试可以被组织为测试套件,包含测试用例,甚至其他的测试套件。
  • JUnit 在一个条中显示进度。如果运行良好则是绿色;如果运行失败,则变成红色。

测试用例:

1.新建NumberMethods类,里面写好方法:

package demo;
/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午4:16:49
 *@version 1.0
 */

public class NumberMethods {
    
    public int getCount(int i,int j){
        return i+j;
    }
    public int getSuntract(int i,int j){
        return i-j;
    }
    public float getDivision(int i,int j){
        return i/j;
    }
    public float getPlus(int i,int j){
        return i*j;
    }
}


2.新建NumberTest测试类,用于测试:

新建操作如下

 

正在测试的类 打自己的类名

选择下一步,选中类中要测试的方法

然后会生成每个方法的默认测试方法,里面默认写了一个类似报错的方法fail(),重写每个方法:

package demo;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午4:21:31
 *@version 1.0
 */

public class NumberTest {
    static NumberMethods num=null;
    
    @BeforeClass
    public static void initclass(){
        System.out.println("@BeforeClass");
        num=new NumberMethods();
    }
    
    @AfterClass
    public static void afterclass(){
        System.out.println("@AfterClass");
        num=new NumberMethods();
    }
    
    @Before
    public void init(){
        System.out.println("@Before");
    }
    
    @After
    public void after(){
        System.out.println("@After");
    }
    @Test
    public void testGetCount() {
        NumberMethods number=new NumberMethods();
        int a=number.getCount(2, 4);
        assertEquals("计算错误", 6, a);
        System.out.println("测试加法通过");
    }

    @Test
    public void testGetSuntract() {
        System.out.println("测试减法通过");
    }

    @Test
    public void testGetDivision() {
        System.out.println("测试除法通过");
    }

    @Test
    public void testGetPlus() {
        System.out.println("测试乘法通过");
    }

}

鼠标右键>运行方式>junit测试

@BeforeClass用于初始化,只执行一次,由于其是在jvm还没加载类之前执行,所以初始化的资源必须为静态。
@AfterClass用于类后执行,只执行一次。

 @Before每个方法之前执行

@After每个方法之后执行

测试套件:

在实际项目中,随着项目进度的开展,单元测试类会越来越多,可是直到现在我们还只会一个一个的单独运行测试类,这在实际项目实践中肯定是不可行的。为了解决这个问题,JUnit 提供了一种批量运行测试类的方法,叫做测试套件。

这样,每次需要验证系统功能正确性时,只执行一个或几个测试套件便可以了。测试套件的写法非常简单,我们需要遵循以下规则:

1.  创建一个空类作为测试套件的入口。

2.  使用注解 org.junit.runner.RunWith 和 org.junit.runners.Suite.SuiteClasses 修饰这个空类。

3.  将 org.junit.runners.Suite 作为参数传入注解 RunWith,以提示 JUnit 为此类使用套件运行器执行。

4.  将需要放入此测试套件的测试类组成数组作为注解 SuiteClasses 的参数。

5.  保证这个空类使用 public 修饰,而且存在公开的不带有任何参数的构造函数。

 

新建JunitTestOne测试类:

package test;


import org.junit.Assert;
import org.junit.Test;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午3:56:17
 *@version 1.0
 */

public class JunitTestOne {

    @Test
    public void test() {
        System.out.println("测试一。。。");  
        Assert.assertTrue(true);  
    }

}

新建JunitTestTwo测试类:

package test;


import org.junit.Assert;
import org.junit.Test;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午3:58:56
 *@version 1.0
 */

public class JunitTestTwo {

    @Test
    public void test() {
         System.out.println("测试二。。。");  
         Assert.assertTrue(true);  
    }

}

新建测试套件类:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午4:00:06
 *@version 1.0
 */

@RunWith(Suite.class)
@SuiteClasses({ JunitTestOne.class,JunitTestTwo.class })
public class AllTests {

}

 测试通过,控制台输出:

 

上例代码中,我将2个测试类放入了测试套件AllTests中,在 Eclipse 中运行测试套件,可以看到2个测试类被调用执行了。测试套件中不仅可以包含基本的测试类,而且可以包含其它的测试套件,这样可以很方便的分层管理不同模块的单元测试代码。

注意:一定要保证测试套件之间没有循环包含关系,否则无尽的循环就会出现在我们的面前。

 

 

 

 

下面写一个例子

新建AllTestsTwo测试类,包含测试类JunitTestOne、JunitTestTwo、AllTests:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午4:07:08
 *@version 1.0
 */

@RunWith(Suite.class)
@SuiteClasses({ AllTests.class, JunitTestOne.class, JunitTestTwo.class })
public class AllTestsTwo {

}

再给AllTests测试类@SuiteClasses中添加AllTestsTwo:

package test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

/**类描述:
 *@author: zk
 *@date: 日期:2018-6-6 时间:下午4:00:06
 *@version 1.0
 */

@RunWith(Suite.class)
@SuiteClasses({ AllTestsTwo.class,  JunitTestOne.class,JunitTestTwo.class })
public class AllTests {

}

然后执行AllTests的junit测试:

报错,原因就是AllTests测试的AllTestsTwo包含对AllTests的测试。

 

posted @ 2018-06-05 17:28  小黑zzz  阅读(6619)  评论(0编辑  收藏  举报