Junit的基础学习

 

一个强大的单元测试框架:

 

一、组成部分:

            1.注解:

               (1)@Test 注解: 放在测试方法上,表示这是用于测试其他方法的一个测试单元

    @Test
    public void testSum1(){
        System.out.println("测试SumUtil类的方法sum1");
        int result = SumUtil.sum1(1,2);
        Assert.assertEquals(result,3);
    }

              (2)@Before 注解: 放在方法上,表示在测试之前要做的事情,比如开启数据库连接之类的

   @Before
    public void before(){
        System.out.println("测试之前做的事");
    }

              (3)@After 注解: 放在方法上,表示在测试之后要做的事情

    @After
    public void after(){
        System.out.println("测试之后做的事");
    }

              (4)@BeforeClass 注解: 修饰的方法会在所有方法被调用前执行,且该方法要是静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件

    @BeforeClass
    public static void beforeClass(){
        System.out.println("在测试之前的之前需要做的事");
    }

              (5)@AfterClass 注解: 所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )

    @AfterClass
    public static void afterClass(){
        System.out.println("在测试之后的之后需要做的事");
    }

              (6)@Ignore 注解:忽略这个方法,不要测试它,让它一个人呆着

    @Ignore
    public void testSum2(){
        System.out.println("测试sum2");
        int result = SumUtil.sum2(1,2,3);
        Assert.assertEquals(result,6);
    }

这里给一个实现上面所有注解的方法后,测试一个方法之后的结果:  这样就能明白每个注解的方法会在什么时候运行

在测试之前的之前需要做的事
测试之前做的事
测试SumUtil类的方法sum1
测试之后做的事
在测试之后的之后需要做的事

 

            2.Assert:关于 Assert的用法,除了举例里的判断数字是否相等,还可以判断boolean, 是否是null ,是否是相同对象等等常见逻辑。

 

二、多个测试:

           准备两个TestCase:

public class TestCase1 {

    @Before
    public void before(){
        System.out.println("测试之前做的事");
    }

    @After
    public void after(){
        System.out.println("测试之后做的事");
    }

    @BeforeClass
    public static void beforeClass(){
        System.out.println("在测试之前的之前需要做的事");
    }

    @AfterClass
    public static void afterClass(){
        System.out.println("在测试之后的之后需要做的事");
    }

    @Test
    public void testSum1(){
        System.out.println("TestCase1测试testSum1");
        int result = SumUtil.sum1(1,2);
        Assert.assertEquals(result,3);
    }

    @Test
    public void testSum2(){
        System.out.println("TestCase1测试testSum1");
        int result = SumUtil.sum2(1,2,3);
        Assert.assertEquals(result,6);
    }
}
public class TestCase2 {

    @Test
    public void testSum1(){
        System.out.println("TestCase2测试testSum1");
        int result = SumUtil.sum1(1,2);
        Assert.assertEquals(result,3);
    }

    @Test
    public void testSum2(){
        System.out.println("TestCase2测试testSum1");
        int result = SumUtil.sum2(1,2,3);
        Assert.assertEquals(result,6);
    }

}

然后创建一个TestSuite来统一测试两个类中的测试方法:

@RunWith(Suite.class)
@Suite.SuiteClasses({TestCase1.class,TestCase2.class})
public class TestSuite {
}

 

得到的结果是:

测试之前做的事
TestCase1测试testSum1
测试之后做的事
测试之前做的事
TestCase1测试testSum1
测试之后做的事
在测试之后的之后需要做的事
TestCase2测试testSum1
TestCase2测试testSum1
在测试之前的之前需要做的事

 

从这里也可以看到,@Before和@After注解会在其所在的类中,为每次测试执行一次

posted @ 2019-03-21 11:15  胡叁安  阅读(162)  评论(0编辑  收藏  举报