JUnit学习

  1. What is Junit?
    Junit is a simple framework to write repeatable tests.It is an instance of the xUnit architecture for unit test frameworks.
    xUnit 是一套基于测试驱动开发的测试框架
  • PythonUnit
  • CppUnit
  • JUnit
  1. how
  • 测试方法上必须使用@Test进行修饰
  • 测试方法必须使用public void进行修饰,不能带任何的参数
  • 新建一个源代码目录来存放我们的测试代码
  • 测试类的包应该和被测试类保持一致
  • 测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
  • 测试类使用Test作为类名的后缀
  • 测试方法使用test作为方法名的前缀
  1. attention
  • 测试用例不是用来证明你是对的,而是用来证明你没有错
  • 测试用例用来达到想要的预期结果,但对于逻辑错误无能为力
  • Failure一般由单元测试使用的断言方法判断失败所引起的,这表示测试点发现了问题,就是说程序输出的结果和我们预期的不一样
  • error是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中一个隐藏的bug
  1. common annotation
  • @Test 将一个普通的方法修饰成为一个测试方法
    @Test(expected = XX.class)
    @Test(timeout = 毫秒)
  • @BeforeClass 它会在所有的方法运行前被执行,static修饰
  • @AfterClass 它会在所有的方法运行结束后被执行,static修饰
  • @Before 会在每一个测试方法被运行前执行一次
  • @After 会在每一个测试方法运行后被执行一次
  • @Ignore 所修饰的测试方法会被测试运行器忽略
  • @RunWith 可以更改测试运行器 继承org.junit.runner.Runner
  1. test suite
    • what(测试套件就是组织测试类一起运行的)
  • how
    * 写一个作为测试套件的入口类,这个类里不包含其他的方法
    * 更改测试运行器Suite.class
    * 将要测试类作为数组传入到Suite.SuiteClasses({})
  1. junit parameter setting
  • 更改默认的测试运行器为RunWith(Parameterized.class)
  • 声明变量来存放预期值和结果值
  • 声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
  • 为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值
  1. some examples
public class Calculate {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int  substract(int a, int b) {
        return a - b;
    }
    
    public int multiply(int a, int b) {
        return a * b;
    }
    
    public int divide(int a, int b) {
        return a / b;
    }
}
public class CaculateTest {

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

    @Test
    public void testAdd() {
        assertEquals(6, new Calculate().add(3, 3));
    }
    
    @Test
    public void testSubstract() {
        assertEquals(2, new Calculate().substract(5, 3));
    }
    
    @Test
    public void testMultiply() {
        assertEquals(4, new Calculate().multiply(2, 2));
    }
    
    @Test
    public void testDivlide() {
        assertEquals(4, new Calculate().multiply(2, 2));
    }
    
}
public class CalculateTest2 {

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

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

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

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

}
public class AnotationTest {

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

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

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

    @Test(expected = ArithmeticException.class)
    public void testDivide() {
        assertEquals(4, new Calculate().divide(2, 0));
    }

    @Test(timeout = 2000)
    public void testWhile() {
        while(true) {
            System.out.println("run forever");
        }
    }
    
    @Ignore
    @Test(timeout = 3000)
    public void testReadFile() {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
public class ErrorAndFailureTest {

    @Test
    public void testAdd() {
        assertEquals(5, new Calculate().add(3, 3));
    }

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

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

    @Test
    public void testDivide() {
        assertEquals(3, new Calculate().divide(6, 0));
    }

}
@RunWith(Parameterized.class)
public class ParameterTest {

    int expected = 0;
    int input1 = 0;
    int input2 = 0;
    
    @Parameters
    public static Collection t() {
        return Arrays.asList(new Object[][] {
            {3, 1, 2},
            {4, 2, 2}
        });
    }
    
    public ParameterTest(int expected, int input1, int input2) {
        this.expected = expected;
        this.input1 = input1;
        this.input2 = input2;
    }

    @Test
    public void testAdd() {
        assertEquals(expected, new Calculate().add(input1, input2));
    }
}
@RunWith(Suite.class)
@Suite.SuiteClasses({TaskTest1.class, TaskTest2.class, TaskTest3.class})
public class SuiteTest {


}

public class TaskTest1 {

    @Test
    public void test() {
        System.out.println("task test 1");
    }

}

public class TaskTest2 {

    @Test
    public void test() {
        System.out.println("task test 2");
    }

}

public class TaskTest3 {

    @Test
    public void test() {
        System.out.println("task test 3");
    }

}

你可能感兴趣的:(JUnit学习)