雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Junit进行单元测试

Posted on 2015-01-06 17:52  huhuuu  阅读(242)  评论(0编辑  收藏  举报

Junit提供 单元测试,多组参数的单元测试,打包单元测试。

 

比如你写了一个Calculator类:

package test_junit;

public class Calculator {
    private static int result; // 静态变量,用于存储运行结果

    public void add(int n) {
        result = result + n;
    }

    public void substract(int n) {
        result = result - 1; // Bug: 正确的应该是 result =result-n
    }

    public void multiply(int n) {
    } // 此方法尚未写好

    public void divide(int n) {
        result = result / n;
    }

    public void square(int n) {
        result = n * n;
    }

    public void squareRoot(int n) {
        for (;;)
            ; // Bug : 死循环
    }

    public void clear() { // 将结果清零
        result = 0;
    }

    public int getResult() {
        return result;
    }
}

写完了想测试下:

选择想测试的类右键new,junit,选择想测试的方法

生成一个test类,把这个测试类补充完整:

package test_junit;

import static org.junit.Assert.*;

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

public class CalculatorTest {

    private static Calculator calculator = new Calculator();

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
    }

    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void testAdd() {
        calculator.add(2);
        calculator.add(3);
        assertEquals(5, calculator.getResult());
        // fail("Not yet implemented");
    }

    @Ignore
    public void testSubstract() {
        calculator.clear();
        calculator.add(10);
        calculator.substract(2);
        assertEquals(8, calculator.getResult());
    }

    @Test
    public void testMultiply() {
        // fail("Not yet implemented");
    }

    @Test
    public void testDivide() {
        calculator.clear();
        calculator.add(8);
        calculator.divide(2);
        assertEquals(4, calculator.getResult());
    }

    @Test(timeout = 12)
    public void testSquareRoot() {

        calculator.squareRoot(8);

        // assertEquals(4,calculator.getResult());
    }

    //@Test(expected = ArithmeticException.class)
    @Test
    public void divideByZero() {
        calculator.divide(0);

    }
}

运行下这个类,就可以看到可视化对错的效果。

如果这个类的某个方法有多组测试数据,那么可以这么写。

package test_junit;

import static org.junit.Assert.*;

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

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

import org.junit.runners.Parameterized.Parameters;

import java.util.Arrays;

import java.util.Collection;

@RunWith(Parameterized.class)
public class CalculatorTest2 {

    private static Calculator calculator = new Calculator();

    private int param;

    private int result;

    @Parameters
    public static Collection data() {

        return Arrays.asList(new Object[][] {

        { 2, 4 },

        { 0, 0 },

        { -3, 9 },

        });

    }

    // 构造函数,对变量进行初始化

    public CalculatorTest2(int param, int result) {

        this.param = param;

        this.result = result;

    }

    @Test
    public void square() {

        calculator.square(param);

        assertEquals(result, calculator.getResult());

    }

}

这时,你可能已经写了十来个测试类了,但是一个一个是比较麻烦的,这时多重选择想要的那几个测试类,右键new ->junit -> Junit Test Suits就可以打包了。

package test_junit;

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

@RunWith(Suite.class)
@SuiteClasses({ CalculatorTest.class, CalculatorTest2.class })
public class AllTests {

}

直接运行这个类就可以一起测试了。

 

 

参考:http://blog.csdn.net/andycpp/article/details/1329218