JUnit学习笔记

JUnit-W3Cschool学习笔记

 

JUnit 是 java 编程语言理想的单元测试框架。

 

概述

一个正式的编写好的单元测试用例的特点是:已知输入和预期输出,即在测试执行前就已知。已知输入需要测试的先决条件,预期输出需要测试后置条件。

每一项需求至少需要两个单元测试用例:一个正检验,一个负检验。如果一个需求有子需求,每一个子需求必须至少有正检验和负检验两个测试用例。

 

框架

测试工具是一整套固定的工具用于基线测试。测试工具的目的是为了确保测试能够在共享且固定的环境中运行,因此保证测试结果的可重复性。它包括:

  • 在所有测试调用指令发起前的 setUp() 方法。
  • 在测试方法运行后的 tearDown() 方法。
 1 import junit.framework.*;
 2 
 3 public class JavaTest extends TestCase {
 4    protected int value1, value2;
 5 
 6    // assigning the values
 7    protected void setUp(){
 8       value1=3;
 9       value2=3;
10    }
11 
12    // test method to add two values
13    public void testAdd(){
14       double result= value1 + value2;
15       assertTrue(result == 6);
16    }
17 }

 

 

 

测试套件意味捆绑几个测试案例并且同时运行。在 JUnit 中,@RunWith 和 @Suite 都被用作运行测试套件。以下为使用 TestJunit1 和 TestJunit2 的测试分类:

当一个类被注解@RunWith或扩展了一个注解的类时@RunWith,JUnit将调用其引用的类以在该类中运行测试,而不是JUnit内置的运行器。JUnit 4中的套件是使用RunWith和一个名为Suite的自定义运行程序构建的。

@RunWith(Suite.class)
 @SuiteClasses(ATest.class,BTest.class,CTest.class)
 公共类ABCSuite { 
 }

例:

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

//JUnit Suite Test
@RunWith(Suite.class)
@Suite.SuiteClasses({ 
   TestJunit1.class ,TestJunit2.class
})
public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit1 {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testPrintMessage() { 
      System.out.println("Inside testPrintMessage()");    
      assertEquals(message, messageUtil.printMessage());     
   }
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;

public class TestJunit2 {

   String message = "Robert";   
   MessageUtil messageUtil = new MessageUtil(message);

   @Test
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Robert";
      assertEquals(message,messageUtil.salutationMessage());
   }
}

 

 

测试运行器 用于执行测试案例。

 

测试分类是在编写和测试 JUnit 的重要分类。几种重要的分类如下:

  • 包含一套断言方法的测试断言
  • 包含规定运行多重测试工具的测试用例
  • 包含收集执行测试用例结果的方法的测试结果

 

 

JUnit - 基本用法

创建一个类

/*
* 一个传入string类型并打印输出的类。
*/
public class MessageUtil {

   private String message;

   //Constructor
   //@param message to be printed
   public MessageUtil(String message){
      this.message = message;
   }

   // prints the message
   public String printMessage(){
      System.out.println(message);
      return message;
   }   
} 

创建 Test Case 类

  • 创建一个名为 TestJunit.java 的测试类。
  • 向测试类中添加名为 testPrintMessage() 的方法。
  • 向方法中添加 Annotaion @Test。
  • 执行测试条件并且应用 Junit 的 assertEquals API 来检查。
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {

   String message = "Hello World"; MessageUtil messageUtil = new MessageUtil(message);

   @Test
@此处实际是判断的return是否正确
/*
*该Test注解告诉JUnit的是,public void到其附着方法可以运行作为一个测试用例。
*为了运行该方法,JUnit首先构造一个新的类实例,然后调用带注释的方法。测试抛出的任何异常都将由JUnit报告为失败。
*如果未引发任何异常,则假定测试成功。
*/
   public void testPrintMessage() {
      assertEquals(message,messageUtil.printMessage());
   }
}

创建 Test Runner 类

 

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

//创建一个 TestRunner 类
public class TestRunner { public static void main(String[] args) {

//运用 JUnit 的 JUnitCore 类的 runClasses 方法来运行上述测试类的测试案例 Result result
= JUnitCore.runClasses(TestJunit.class);

    //获取 Result Object 的 getFailures() 方法中的失败结果
for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); }

    //获取 Result object 的 wasSuccessful() 方法中的成功结果 System.out.println(result.wasSuccessful()); } }

 

posted on 2020-07-09 15:42  Huab  阅读(132)  评论(0编辑  收藏  举报