zoukankan      html  css  js  c++  java
  • Junit02 Junit创建及简单实现

    目录

    一、Junit概念

            Junit是java语言单元测试框架,在java程序中,一个工作单元通常是指一个方法,那么单元测试也就是对一个方法进行测试,程序员一般通过Junit来完成自己代码的一个功能测试,所以单元测试又可以叫做程序员测试,如果测试人员在熟悉方法逻辑及其实现的情况下,也可以写Junit单元测试来进行接口测试,即白盒测试。

    二、 Junit测试环境搭建

    2.1 一点概念

    市面上比较流行的服务器: tomcat(war)jboss(ear)weblogic

    用的比较多的项目构建工具: antmaven:可以在线管理项目的依赖

    2.2 导入Jar包的方式搭建Junit测试环境

    注: maven中央仓库网址

    1. 创建一个普通的maven项目所需要的依赖包以及其对应的下载地址
    2. junit-4.11.jar
    3. hamcrest-core-1.3
    4. 之后添加项目的依赖项即可完成一个maven项目的创建(Jar文件)

    2.3 创建Maven项目的方式搭建Junit测试环境

    1. 创建一个maven project
    2. 在pom.xml里面添加一个junit依赖

    2.3.1 具体步骤

    1. 创建maven项目
    2. 修改pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.maven</groupId>
      <artifactId>JunitTest02</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      
      <!--  以下是添加的代码-->
      <dependencies>
    	  <dependency>
    	  	<groupId>junit</groupId>
    	  	<artifactId>junit</artifactId>
    	  	<version>4.11</version>
    	  </dependency>
      </dependencies>
      <!--  添加代码结束-->
      
    </project>
    

    添加依赖后结果展示

    三、 创建一个测试用例

    3.1 注意事项

    1. src/test/java下新建Package,用于编写测试用例
    2. 所有编写的测试类都继承自junit.framework.TestCase
    3. 测试类中所有的方法均需要以test开头
    package com.junit.exam01;
    
    import junit.framework.TestCase;
    
    // 所有编写的测试类都继承自junit.framework.TestCase
    public class Example01 extends TestCase{
        // 测试类中所有的方法均需要以test开头
    	public void testExam01(){
    		System.out.println("this is the first case");
    	}
    	
    	public void testExam02() {
    		System.out.println("This is the second case");
    	}
    }
    
    1. 可以使用注解的方式(装饰器)来标注test方法(@Test,此时测试方法不必以test开头,也不必继承TestCase
    package com.junit.exam01;
    
    import org.junit.Test;
    
    public class DecoExam{
    	// 以使用**注解**的方式来标注test方法此时测试方法不必以test开头
    	@Test
    	public void DecoExamA() {
    		System.out.println("This is test A");
    	}
    	
    	@Test
    	public void DecoExamB() {
    		System.out.println("This is test B");
    	}
    }
    
    

    四、 注解详解

    4.1 @Test

    4.2 @Before

    在所有的测试方法执行之前执行一次

    package com.junit.exam01;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import junit.framework.TestCase;
    
    // 注意一下,用继承的方式before注解不管用了
    public class DecoExamBefore{
    	@Before
    	public void funcBefore() {
    		System.out.println("This is Before");
    	}
    	
    	@Test
    	public void DecoExamA() {
    		System.out.println("This is test A");
    	}
    	
    	@Test
    	public void DecoExamB() {
    		System.out.println("This is test B");
    	}
    }
    

    Before注解案例

    4.3 @After

    在所有的测试方法执行之后执行一次

    package com.junit.exam01;
    
    import org.junit.After;
    import org.junit.Test;
    
    public class DecoExamAfter {
    	@After
    	public void funcBefore() {
    		System.out.println("This is After");
    	}
    	
    	@Test
    	public void DecoExamA() {
    		System.out.println("This is test A");
    	}
    	
    	@Test
    	public void DecoExamB() {
    		System.out.println("This is test B");
    	}
    }
    

    After注解案例

    4.4 @BeforeClass和@AfterClass

    用BeforeClass注解的方法在类加载的时候首先被执行一次

    package com.junit.exam01;
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class DecoExamClassBefore2After {
    	
    	private int result = 0;
    	
    	// 使用BeforeClass和AfterClass注解需要使用static关键字
    	@BeforeClass
    	public static void beforeExam() {
    		System.out.println("This is class before");
    	}
    	
    	@AfterClass
    	public static void adterExam() {
    		System.out.println("This is class after");
    	}
    	
    	@Test
    	public void examA() {
    		System.out.println("This is ExamA");
    	}
    	
    	@Test
    	public void examB() {
    		System.out.println("This is ExamB");
    	}
    }
    

    BeforeClass和AfterClass案例

    五、断言

    5.1 基础介绍

    1. assertEquals(a, b)

            判断两个数据是否一致,如果一致则表示测试通过,否则表示测试不通过,抛出断言错误

    1. assertNotEquals(a, b)

            判断两个数据是否不一致,如果不一致则表示测试通过,否则表示测试不通过,抛出断言错误

    1. assertNull(...)

            判断某数据是否为空,如果为空,则测试通过,否则抛出断言错误

    1. assertNotNull(...)

            判断某数据是否为空,如果不为空,则测试通过,否则抛出断言错误

    1. assertFalse(...)

            判断某数据是否为真,如果为假,则表示测试通过,否则抛出断言错误

    1. assertTrue(...)

            判断某数据是否为真,如果为真,则表示测试通过,否则抛出断言错误

    5.2 案例

    package com.junit.exam01;
    import static org.junit.Assert.assertEquals;
    
    import org.junit.Before;
    import org.junit.Test;
    
    import com.junit.calc.CalcExam;
    
    import junit.framework.Assert;
    
    public class DemoTestCalc {
    	private CalcExam calc;
    	
    	@Before
    	public void InitCalc() {
    		calc = new CalcExam();
    	}
    	
    	@Test
    	public void add() {
    		calc.add(3);
    		int result = calc.getResult();
    		System.out.println("实际结果为:" + result);
    		Assert.assertEquals(3, result);
    	}
    	
    	@Test
    	public void sub() {
    		calc.sub(3);
    		int result = calc.getResult();
    		System.out.println("实际结果为:" + result);
    		Assert.assertEquals(-3, result);
    	}
    	
    	@Test
    	public void multi() {
    		calc.multi(3);
    		int result = calc.getResult();
    		System.out.println("实际结果为:" + result);
    		Assert.assertEquals(0, result);
    	}
    	
    	@Test
    	public void div() {
    		calc.div(3);
    		int result = calc.getResult();
    		System.out.println("实际结果为:" + result);
    		Assert.assertEquals(0, result);
    	}
    	
    }
    
    //***************************************************************************************************//
    // 以下是Clac类的内容
    package com.junit.calc;
    
    public class CalcExam {
    	private int result = 0;
    	
    	public void add(int a) {
    		result += a;
    	}
    	
    	public void sub(int a) {
    		result -= a;
    	}
    	
    	public void div(int a) {
    		if (a == 0) return;
    		result /= a;
    	}
    	
    	public void multi(int a) {
    		result *= a;
    	}
    	
    	public int getResult() {
    		return this.result;
    	}
    }
    //----------------------------------------------------------------------------------------------------//
    

    六、 Junit打包(测试集实现)

            要实现测试集的功能需要使用一个特殊的Runner,因此我们需要向@RunWith标注中传递一个参数Suite.class(即 @RunWith (Suite.class) )。同时,我们还需另一个标注@SuiteClasses用以表明这个类是一个打包测试类,基本语法为 @SuiteClasses({... , ... , ...}) ,其中的参数为需要测试的类
    有了上述两个标注之后,就已经完整的表达了所有的含义,因此下面的类已经无关紧要,内容为空即可

    package com.junit.exam01;
    
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;
    import org.junit.runners.Suite.SuiteClasses;
    
    // 固定写法,传递参数Suite.class
    @RunWith(Suite.class)
    
    // 将要测试的类写到里面
    @SuiteClasses({
        // 由于用到的测试类都在同一个包中也不需要额外打包
    	DemoTestCalc.class,
    	DecoExamAfter.class,
    	DecoExamBefore.class,
    	DecoExamTest.class,
    	DecoExamClassBefore2After.class
    })
    
    // 这个类为空即可,但是必须保留
    public class DemoTestSuite {
    
    }
    
    

    测试结果

  • 相关阅读:
    SQL查询
    SQL语句
    SQL语句
    查询设计分析
    数据库引擎调整顾问
    详解执行计划
    详解索引连接类型
    查询开销
    利用SQL Profiler处理开销较大的查询
    状压dp的题目列表 (一)
  • 原文地址:https://www.cnblogs.com/gupan/p/9015819.html
Copyright © 2011-2022 走看看