1. 程式人生 > 其它 >UVA11327 Enumerating Rational Numbers 題解

UVA11327 Enumerating Rational Numbers 題解

測試分類:

  • 黑盒測試:不需要寫程式碼,給輸入值,看程式是否能夠輸出期望的值。
  • 白盒測試:需要寫程式碼的。關注程式具體的執行流程。

一、環境配置

  • 匯入依賴環境
<!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

二、基本用法

  • 測試程式碼和生成程式碼分開放置,Maven預設目錄正好符號這個要求。
  • Junit使用:白盒測試

步驟:

1. 定義一個測試類(測試用例)
	建議:
	測試類名:被測試的類名Test		CalculatorTest
	包名:xxx.xxx.xx.test		com.practice.test

2. 定義測試方法:可以獨立執行
	建議:
	方法名:test測試的方法名	testAdd()  
	返回值:void
	引數列表:空參

3. 給方法加@Test

三、使用案例

被測試程式碼放在main下的java目錄中,junit測試程式碼放在test下的java目錄中,形成一一對應關係,測試程式碼使用Test開頭命名。

被測試Calculator程式碼:
package com.practice.junit;

/**
 * 計算器類
 */
public class Calculator {
    
    /**
     * 加法
     * @param a
     * @param b
     * @return
     */
    public int add (int a , int b){
        //int i = 3/0;

        return a - b;
    }

    /**
     * 減法
     * @param a
     * @param b
     * @return
     */
    public int sub (int a , int b){
        return a - b;
    }
}
測試CalculatorTest程式碼
package com.practice.test;

import com.practice.junit.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {
    /**
     * 初始化方法:
     *  用於資源申請,所有測試方法在執行之前都會先執行該方法
     */
    @Before
    public void init(){
        System.out.println("init...");
    }

    /**
     * 釋放資源方法:
     *  在所有測試方法執行完後,都會自動執行該方法
     */
    @After
    public void close(){
        System.out.println("close...");
    }


    /**
     * 測試add方法
     */
    @Test
    public void testAdd(){
        //1.建立計算器物件
        System.out.println("testAdd...");
        Calculator c  = new Calculator();
        //2.呼叫add方法
        int result = c.add(1, 2);
        //System.out.println(result);

        //3.斷言  斷言測試結果是3,與實際測試結果比較
        Assert.assertEquals(3,result);

    }

    @Test
    public void testSub(){
        //1.建立計算器物件
        Calculator c  = new Calculator();
        int result = c.sub(1, 2);
        System.out.println("testSub....");
        Assert.assertEquals(-1,result);
    }
}

四、補充內容


JUnit 註解

@Test: 這個註釋說明依附在 JUnit 的 public void 方法可以作為一個測試案例。
@Before: 有些測試在執行前需要創造幾個相似的物件。在 public void 方法加該註釋是因為該方法需要在 test 方法前執行。
@After: 如果你將外部資源在 Before 方法中分配,那麼你需要在測試執行後釋放他們。在 public void 方法加該註釋是因為該方法需要在 test 方法後執行。
@BeforeClass: 在 public void 方法加該註釋是因為該方法需要在類中所有方法前執行。
@AfterClass: 被註解的這個方法在所有測試結束後執行。這個註解可以用來進行清理活動。
@Ignore: 這個註釋是用來忽略有關不需要執行的測試的。

JUnit 加註解執行過程

beforeClass(): 方法首先執行,並且只執行一次。
afterClass(): 方法最後執行,並且只執行一次。
before(): 方法針對每一個測試用例執行,但是是在執行測試用例之前。
after(): 方法針對每一個測試用例執行,但是是在執行測試用例之後。
*注:在 before() 方法和 after() 方法之間,執行測試用例。

JUnit 斷言

Junit所有的斷言都包含在 Assert 類中。

這個類提供了很多有用的斷言方法來編寫測試用例。只有失敗的斷言才會被記錄。Assert 類中的一些有用的方法列式如下:

void assertEquals(boolean expected, boolean actual)
	檢查兩個變數或者等式是否平衡
void assertTrue(boolean expected, boolean actual)
	檢查條件為真
void assertFalse(boolean condition)
	檢查條件為假
void assertNotNull(Object object)
	檢查物件不為空
void assertNull(Object object)
	檢查物件為空
void assertSame(boolean condition)
	assertSame() 方法檢查兩個相關物件是否指向同一個物件
void assertNotSame(boolean condition)
	assertNotSame() 方法檢查兩個相關物件是否不指向同一個物件
void assertArrayEquals(expectedArray, resultArray)
	assertArrayEquals() 方法檢查兩個陣列是否相等

JUnit 時間測試

如果一個測試用例比起指定的毫秒數花費了更多的時間,那麼 Junit 將自動將它標記為失敗。timeout引數和 @Test 註解一起使用。

@Test(timeout=1000)		//時間單位為毫秒
Record Our Mind