• 详解junit


    目录

    1.概述

    2.断言

    3.常用注解

    3.1.@Test

    3.2.@Before

    3.3.@After

    3.4.@BeforeClass

    3.5.@AfterClass

    4.异常测试

    5.超时测试

    6.参数化测试


    1.概述

    什么是单元测试:

    单元测试,是针对最小的功能单元编写测试代码,在JAVA中最小的功能单元是方法,单元测试针对JAVA就是单个方法的测试。目的就是保证单个方法的正常运行。

    JUnit是什么:

    专门针对java语言设计,使用广泛的一个标准单元测试框架。使用断言+注解的方式对单个方法进行测试。注解用来控制行为,断言用来进行判断。

    2.断言

    名称说明示例
    assertEquals相等assertEquals(100,x)
    assertArrayEquals数组相等assertArrayEquals({1,2,3},x)
    assertEquals浮点数相等assertEquals(3.1415926,x)
    assertNullnullassertNull(x)
    assertTruetrueassertTrue(x>0)
    assertFalsefalseassertFalse(x<0)
    assertNotEquals不相等assertNotEquals(100,x)
    assertNotNull不为空assertNotNull(x)

    3.常用注解

    3.1.@Test

    @Test,用来注解单个测试用例,每个@Test就是个独立的单元,单个@Test的生命周期是相互独立的。

    代码示例:

    1. public class Demo1Test {
    2. Demo1 demo1;
    3. public Demo1Test(){
    4. System.out.println("建立测试用例!");
    5. }
    6. @Before
    7. public void before(){
    8. System.out.println("测试开始!");
    9. demo1=new Demo1();
    10. }
    11. @Test
    12. public void testSum1(){
    13. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    14. }
    15. @Test
    16. public void testSum2(){
    17. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    18. }
    19. @After
    20. public void after(){
    21. System.out.println("测试结束!");
    22. }
    23. }

    测试结果:

    3.2.@Before

    @Before,@Test之前执行,一般用于准备一些资源。

    代码示例:

    1. public class Demo1Test {
    2. Demo1 demo1;
    3. @Before
    4. public void before(){
    5. demo1=new Demo1();
    6. }
    7. @Test
    8. public void testSum(){
    9. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    10. }
    11. }

    3.3.@After

    @After,@Test之后执行,一般用于释放一些资源。

    代码示例:

    1. public class Demo1Test {
    2. Demo1 demo1;
    3. @Before
    4. public void before(){
    5. demo1=new Demo1();
    6. }
    7. @Test
    8. public void testSum(){
    9. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    10. }
    11. @After
    12. public void after(){
    13. System.out.println("测试结束!");
    14. }
    15. }

    3.4.@BeforeClass

    @BeforeClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期开始的时候执行一次。

    一般用于准备一些所有用例共享的资源。

    代码示例:

    1. public class Demo1Test {
    2. Demo1 demo1;
    3. @BeforeClass
    4. public static void beforeClass(){
    5. System.out.println("beforeClass......");
    6. }
    7. public Demo1Test(){
    8. System.out.println("建立测试用例!");
    9. }
    10. @Before
    11. public void before(){
    12. System.out.println("测试开始!");
    13. demo1=new Demo1();
    14. }
    15. @Test
    16. public void testSum1(){
    17. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    18. }
    19. @Test
    20. public void testSum2(){
    21. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    22. }
    23. @After
    24. public void after(){
    25. System.out.println("测试结束!");
    26. }
    27. }

    运行结果:

    3.5.@AfterClass

    @AfterClass,作用于类层面,修饰静态方法,整个类的生命周期中,只在类的生命周期结束的时候执行一次。

    一般用于销毁一些所有用例共享的资源。

    代码示例:

    1. public class Demo1Test {
    2. Demo1 demo1;
    3. @BeforeClass
    4. public static void beforeClass(){
    5. System.out.println("beforeClass......");
    6. }
    7. public Demo1Test(){
    8. System.out.println("建立测试用例!");
    9. }
    10. @Before
    11. public void before(){
    12. System.out.println("测试开始!");
    13. demo1=new Demo1();
    14. }
    15. @Test
    16. public void testSum1(){
    17. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    18. }
    19. @Test
    20. public void testSum2(){
    21. Assert.assertEquals("65",demo1.sum("5",2,4,6));
    22. }
    23. @After
    24. public void after(){
    25. System.out.println("测试结束!");
    26. }
    27. @AfterClass
    28. public static void afterClass(){
    29. System.out.println("afterClass......");
    30. }
    31. }

    运行结果:

    4.异常测试

    通过@Test注解的expected属性可以断定该TestCase抛出的异常,抛出不匹配的异常会报错。

    代码示例:

    1. @Test(expected = NumberFormatException.class)
    2. public void testNumberFormat(){
    3. Integer.parseInt(null);
    4. }

    5.超时测试

    通过@Test注解的timeout属性可以设置每个TestCase执行耗时的时间阈值,超时会报错。

    代码示例:

    1. @Test(timeout = 3000)
    2. public void testNumberFormat(){
    3. try {
    4. Thread.sleep(4000);
    5. } catch (InterruptedException e) {
    6. e.printStackTrace();
    7. }
    8. }

    6.参数化测试

    Junit提供了输入一组参数进行测试的机制。

    代码示例:

    1. @RunWith(Parameterized.class)
    2. public class ParameterTest {
    3. //用于准备一组数据的方法
    4. //方法严格约定为 public Collection data()
    5. @Parameterized.Parameters
    6. public static Collection data(){
    7. return Arrays.asList(new Object[][]{
    8. {0,0},{1,1},{-1,1}
    9. });
    10. }
    11. int input;
    12. int expected;
    13. //准备好的数据会在构造方法中自动传递过来
    14. public ParameterTest(int input,int expected){
    15. this.input=input;
    16. this.expected=expected;
    17. }
    18. @Test
    19. public void testAbs(){
    20. int r=Math.abs(this.input);
    21. Assert.assertEquals(this.expected,r);
    22. }
    23. }

     

     

  • 相关阅读:
    Hbase 笔记
    ubuntu18.04离线源制作
    实现Internet的DNS服务架构
    SUS系统可用性量表
    【Pytorch、torchvision、CUDA 各个版本对应关系以及安装指令】
    Centos7环境下安装MySQL8详细教程
    JMeter HTTP请求的详细指南,还不知道的快来看
    MATLAB嵌套if语句||MATLAB switch语句
    08: value too great for base (error token is “08“)
    OpenGL 坐标系统详解
  • 原文地址:https://blog.csdn.net/Joker_ZJN/article/details/132388711