JUnit簡單測試樣例

JUnit簡單測試樣例

源碼

Main.javajava

package github.hyzeta;

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

public class Main {

    public static void main(String[] args) {
        // write your code here
        Result result = JUnitCore.runClasses(TriangleFunTest.class);
        if (result.wasSuccessful()) {
            System.out.println("All tests for triangle function has passed.");
        } else {
            System.out.println("Some tests for triangle function has failed.");
            for (Failure failure : result.getFailures()) {
                System.out.println(failure.toString());
            }
        }
    }

}

TriangleFun.javagit

package github.hyzeta;

enum TriangleFuncResult {
    EQUILATERAL, ISOSCELES, SCALENE, ERROR
}

public class TriangleFun {
    public TriangleFuncResult triangle(int a, int b, int c) {
        if (a <= 0 || b <= 0 || c <= 0) {
            return TriangleFuncResult.ERROR;
        }
        if (!(a + b > c && Math.abs(a - b) < c)) {
            return TriangleFuncResult.ERROR;
        }
        if (a == b && b == c) {
            return TriangleFuncResult.EQUILATERAL;
        }
        if (a == b || a == c || b == c) {
            return TriangleFuncResult.ISOSCELES;
        }
        return TriangleFuncResult.SCALENE;
    }
}

TriangleFunTest.javagithub

package github.hyzeta;

import org.junit.Test;

import static org.junit.Assert.*;

public class TriangleFunTest {
    @Test
    public void testErrorTriangle() {
        assertEquals(new TriangleFun().triangle(0, 0, 0), TriangleFuncResult.ERROR);
        assertEquals(new TriangleFun().triangle(-1, -1, -1), TriangleFuncResult.ERROR);
        assertEquals(new TriangleFun().triangle(-1, 2, 3), TriangleFuncResult.ERROR);
        assertEquals(new TriangleFun().triangle(1, 2, 3), TriangleFuncResult.ERROR);
    }

    @Test
    public void testEquilateralTriangle() {
        assertEquals(new TriangleFun().triangle(3, 3, 3), TriangleFuncResult.EQUILATERAL);
        assertEquals(new TriangleFun().triangle(1, 1, 1), TriangleFuncResult.EQUILATERAL);
        assertEquals(new TriangleFun().triangle(2, 2, 2), TriangleFuncResult.EQUILATERAL);
    }


    @Test
    public void testIsosceles() {
        assertEquals(new TriangleFun().triangle(2, 2, 3), TriangleFuncResult.ISOSCELES);
        assertEquals(new TriangleFun().triangle(4, 4, 5), TriangleFuncResult.ISOSCELES);
        assertEquals(new TriangleFun().triangle(5, 7, 7), TriangleFuncResult.ISOSCELES);
    }

    @Test
    public void testScalene() {
        assertEquals(new TriangleFun().triangle(2, 3, 4), TriangleFuncResult.SCALENE);
        assertEquals(new TriangleFun().triangle(3, 4, 5), TriangleFuncResult.SCALENE);
        assertEquals(new TriangleFun().triangle(12, 22, 26), TriangleFuncResult.SCALENE);
    }

}

JUnit和eclemma安裝過程

直接在Maven倉庫裏搜索JUnit和hamcrest-coremaven

http://search.maven.org/#search|gav|1|g:%22junit%22%20AND%20a:%22junit%22
http://search.maven.org/#search|gav|1|g:%22org.hamcrest%22%20AND%20a:%22hamcrest-core%22

下載junit-4.12.jar包和hamcrest-core-1.3.jar包函數

而後在IntelliJ IDEA裏的Project Structure裏的Libraries裏添加這兩個jar包測試

creen Shot 2018-03-22 at 11.36.21 A

JUnit配置完成ui

eclemma的安裝過程相同,直接將eclemma-2.3.3.zip加入到Libraries裏就能夠了,配置完成後以下rest

creen Shot 2018-03-22 at 11.38.16 A

測試樣例編寫

詳情請參考開頭的源碼,主要是編寫了TriangleFun類(含有triangle函數)和TriangleFuncResult枚舉類型,TriangleFuncResult枚舉類型包含四個結果:code

  • 不是三角形:TriangleFuncResult.ERROR
  • 等邊:TriangleFuncResult.EQUILATERAL
  • 等腰:TriangleFuncResult.ISOSCELES
  • 非等腰三角形:TriangleFuncResult.SCALENE

而後編寫測試類型TriangleFunTest,包含四個測試函數testErrorTriangle,testEquilateralTriangle,testIsosceles,testScalene,分別測試四種結果。ip

最後在Main函數中主動喚起JUnit測試

Result result = JUnitCore.runClasses(TriangleFunTest.class);

而後判斷是否正確,若是測試經過則彙報成功,不成功則打印全部錯誤信息。

if (result.wasSuccessful()) {
    System.out.println("All tests for triangle function has passed.");
} else {
    System.out.println("Some tests for triangle function has failed.");
    for (Failure failure : result.getFailures()) {
        System.out.println(failure.toString());
    }
}

JUnit測試結果

creen Shot 2018-03-22 at 11.46.37 A

代碼覆蓋率測試

creen Shot 2018-03-22 at 11.47.18 A

creen Shot 2018-03-22 at 11.47.41 A

之因此Main函數有部分沒有覆蓋到,是由於在Main中有部分代碼用於判斷和輸出測試中的錯誤信息,而這個測試樣例並無發生錯誤,因此這段代碼是跑不到的。

相關文章
相關標籤/搜索