JUnit学习笔记--慕课网JUnit教程

1、JUnit的Test类最好存放到test源目录中,不要放到src下,另外,Test类的包名要和被测试类的包名一致。
这里写图片描述

2、关于JUnit进度条上的Failure和Error
Failure 是 判断和预期不一致 比如你使用了assertEquals(expected,input); 当JUnit判断input和expected不一致,就会出Failure错误。
Error 是程序引发的问题。。比如:在被调用方法中,逻辑是做除法,但是你传入了除数为0,那么就会报Error错误。
这里写图片描述

3、测试用例是用来判断是否和预期一致,不能保证程序逻辑没有错误。
比如:你想要得到某一个预期结果,虽然得到了,但是无法保证程序的逻辑就是没有问题的,很有可能错误的逻辑得到了同样的结果。

4、在Test类上右键Run As JUnit Test可以一起测试这个类中的全部方法。

5、在被测试类右键-New一个 JUnit Test Case,可以选择测试类中的一部分方法,很方便。
否则我们就需要一个一个手打 public void test方法名(){}
这里写图片描述

6、

@Beforeclass 
@Before
@Test
@After
@Before
@Test
@After
@AfterClass

执行顺序如上。
两个带class注解都是静态的。@Beforeclass适合加载一些配置文件(只用加载一次的),@fterClass适合关闭资源,比如:关闭数据库连接。

7、@Test注解的两个属性
expected = 预期会抛出的异常名.class 如果程序执行抛出了这个异常,那么执行成功。
timeout:Optionally specify timeout in milliseconds to cause a test method to fail if it takes longer than that number of milliseconds.
这里介绍两种使用场景 : 可以用定时结束来终止死循环 ;做性能分析,timeout属性设置的就是预期可以接受的时长,如果超过了这个时长还没有结束方法,JUnit会为我们结束方法

这里具体举个例子:
测试代码如下

package TestAttributeTest;

import org.junit.Test;

public class AttributeTest {

    //timeout设置2秒,线程却睡3秒
    @Test(timeout = 2000)
    public void testAttribute(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

这里写图片描述

8、@Ignore JUnit会忽略方法,不进行测试。

9、@RunWith 指定测试运行器 ,我们可以自己写一个运行器,满足某种特殊的需求(但一般来说,JUnit提供的运行器足够了),继承org.junit.Runner即可
运行器的知识这里可以稍作了解,10点和11点都介绍了这个注解的使用方式。

10、测试套件
测试套件是用于同时测试多个JUnitTest类的

@RunWith(Suite.class)
@Suite.SuiteClasses({JUnitTest1.class,JUnitTest2.class,JUnitTest3.class})
public class SuiteTest{
}

这样就可以同时运行了

11、参数化测试
使用场景:测试同一个方法,但是需要很多组不同的参数,可以使用这个方式

@RunWith(Parameterized.class)
public class ParaTest{
    int expected = 0;
    int input1 = 0;
    int input2 = 0;

    /**
    要传入的参数,传入几组参数,就会执行几次Test注解标注的方法,这里传入了三组参数,就会执行三次
    */
    @Parameters
    public static Collection prepareData(){
        Object[][] objects = {{3,1,2},{5,2,3},{7,3,4}};
        Arrays.asList(objects);
    }

    //由构造器传入
    public ParaTest(int expected,int input1,int input2){
        this.expected = expected;
        this,input1 = input1;
        this.input2 = input2;
    }

    //Calculator的add方法,执行input1 + input2
    @Test
    public void testAdd(){
        assertEquals(expected,new Calculator().add(input1,input2));
    }

}

12、可以用JUnit测试单个框架是否正确加载进来,还可以测试spring是否成功管理了hibernate的bean
以前不会junit的时候,每次都重启服务器查看,很麻烦,有时候还需要等待很长时间才能看到是否成功。

使用案例如下:

public class SpringTest{
    private ApplicationContext context = null;

    //加载spring的配置文件
    @BeforeClass
    public static void setUpBeforeClass() throw Exception{
        context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }

    //从context中获取bean,看是否可以成功获取,成功获取代表Spring加载成功
    @Test
    public void testSpring(){
        System.out.println(context.getBean("beanId"));
    }
}

猜你喜欢

转载自blog.csdn.net/kingmore96/article/details/80113116