zoukankan      html  css  js  c++  java
  • Java之单元测试工具(Junit)

    Junit是Java单元测试框架,一般Eclipse里面会集成这个Junit4测试工具

    既然是测试工具,虽然开发用得比较多,但作为测试人员也需要具备会Junit测试的思想,况且技多不压身

    这里简单介绍下用法:

    1、在eclipse中创建一个junit4Test工程

    点击“File” -> “New” -> “Java Project”,出现如下界面,填写工程名称junit4Test:

    点击Next或者Finish,即创建好了junit4Test工程

    2、创建com.junit4Test包

    右键“junit4Test”工程名称,选择“New” -> “Package”,即得到包的配置界面如下: 

    填写包名,然后点击Finish即创建了junit4TestPackage包

    3、创建被测试类和方法

    这里我们用简单的加法来做被测试对象

    右击包名“junit4TestPackage” -> “New” -> “Class”,出现下面的配置界面:

    配置好类名称,然后点击“Finish”即创建了类,然后在类里面写一个加法的方法:

    package com.junit4Test;
    
    public class Add {
    	public int addTest(int x,int y){
    		return x + y;
    	}
    
    }
    

      

    4、创建测试包

    创建方法和上面的创建包一样,取个名字“junit4AddTest”

    5、创建测试类

    右键测试包名“com.junit4AddTest” -> “New” -> “JUnit Test Case”,如果你没有导入Junit的jar包,那你需要先导入下,右击工程名称“junit4Test”,选择“Properties”或者选择“Build Path” -> “Configure Build Path” ,出现如下配置界面:

    按照上面步骤配置即可。然后按照开始说的,就会出现如下配置界面:

    写好测试类名称,选择好需要的方法(如无需要可以不选择)和需要测试的类(因为不在一个包里面,这里填写的是包名+类名),然后点击“Next”:

    勾选被测试方法addTest,然后选择“Finish”,这时候就创建好了用例:

    这时候看到的是一个空的测试方法,我们需要调用被测试方法并做断言,上面右侧红框中应该是如下代码:

    package com.junit4AddTest;
    
    import static org.junit.Assert.*;
    import com.junit4Test.*;
    import org.junit.Test;
    
    public class AddTest {
    
    	@Test
    	public void testAddTest() {
    		int z = new Add().addTest(1,2);
    		assertEquals(3,z);
    	}
    
    }
    

      

     这时候就可以执行测试类了,右击测试用例可以看到,原来是执行java程序,现在变成了执行junit Test:

     执行结果如下:

    执行结果是Runs:1/1(总共一个用例,执行了一个用例),Errors:0(没有错误),Failures:0(没有失败)

    如果我们把断言值改成:assertEquals(2,z);,则结果如下:

    把断言改了之后,左侧显示Failures:1(失败一个用例),用例也显示为,左侧下面也给出了Trace。

    我们在测试类中复制一个testAddTest方法,一个错误的一个成功的:

    package com.junit4AddTest;
    
    import static org.junit.Assert.*;
    import com.junit4Test.*;
    import org.junit.Test;
    
    public class AddTest {
    
    	@Test
    	public void testAddTest() {
    		int z = new Add().addTest(1,2);
    		assertEquals(2,z);
    	}
    	@Test
    	public void testAddTest1() {
    		int z = new Add().addTest(2,2);
    		assertEquals(4,z);
    	}
    
    }
    

      

    我们再执行下看看结果如下:

    失败的依然是标记失败

    ------------------------------------------------------------------华丽的分割线------------------------------------------------------------------

    补充说明下Junit 的几种注解(和python中的装饰器类似):

      1.@Test: 测试方法

        a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
        b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过

      2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码(JUnit5中使用@Disabled代替)

      3.@Before: 每一个测试方法之前运行(Junit5中使用@BeforeEach)

      4.@After: 每一个测试方法之后运行(Junit5中使用@BeforeEach)

      5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分@before,是所有测试方法(Junit5中使用@BeforeAll)

      6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After(Junit5中使用@AfterAll)

      7.@Parameters:表示该方法是个参数化测试(Junit5中使用@ParameterizedTest)

    需要导入如下:

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

      

     如果在创建JUnit case的时候,勾选了相关项,则在case里面就会自动生成(下图红色框):

    setUpBeforeClass对应BeforeClass

    setUp对应Before

    tearDownAfterClass对应AfterClass

    tearDown对应After

    这个有点类似python中unittest框架中的setUp和tearDown,包括里面的断言。使用过的小伙伴应该一看就懂

    另外Junit框架和python中unittest框架类似的是测试套件(testsuite)这个概念,下面讲解下套件如何使用

    我们在原来加法基础上再增加一个被测类(减法),如下:

    package com.junit4Test;
    
    public class Minus {
    	public int Minus(int x,int y){
    		return x - y;
    	}
    }
    

    则被测包中有俩个被测类:

    在测试类中响应增加减法的测试类:

    package com.junit4AddTest;
    
    import static org.junit.Assert.*;
    
    import org.junit.Test;
    import com.junit4Test.*;
    
    public class MinusTest {
    
    	@Test
    	public void test() {
    		int z = new Minus().Minus(5,2);
    		assertEquals(3,z);
    	}
    
    }
    

    这样,我们就有俩个类三个测试用例:

    我们在测试类的包里面增加一个套件类,来统一管理测试类:

    测试套件代码如下:

    package com.junit4AddTest;
    
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;
    import org.junit.runners.Suite;
    
    @RunWith(Suite.class)
    @Suite.SuiteClasses({AddTest.class,MinusTest.class})
    public class AllTestCase {
    	/*
    	 * 这里不需要写任何东西
    	 * 把需要的测试类填写到上面SuiteClasses中即可
    	 */
    }
    

      

     这样便于测试类的管理~

  • 相关阅读:
    Netty回调与Channel执行流程分析
    Netty执行流程分析与重要组件介绍
    HBase 介绍
    Java文件上传下载原理
    ngxtop安装和使用
    开启Nginx监控 with-http_stub_status_module
    Spring 事务模板方法设计模式
    Spring 事务管理
    JdkDynamicAopProxy 拦截器链的获得与递归执行
    CgLib实现AOP
  • 原文地址:https://www.cnblogs.com/watertaro/p/9464070.html
Copyright © 2011-2022 走看看