单元测试_JUnit常用单元测试注解介绍及代码演示 2

简介: 单元测试_JUnit常用单元测试注解介绍及代码演示

 

5. 单元测试实践

被测类BinarySearch

 

package org.shouke.demo;

 

publicclass BinarySearch {

 

   publicint binarySearch(long[] a, long key) {

       int low = 0;

       int high = a.length - 1;

       

       while (low <= high) {

           int mid = (low + high) >>> 1;

           

           long midVal = a[mid];

           

           if (midVal < key)

               low = mid + 1;

           elseif (midVal > key)

               high = mid - 1;

           else

               return mid;

       }

       return -1;

   }

   

 

}

 

测试类BinarySearchTest

 

package org.shouke.test;

 

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Assert;

import org.junit.Ignore;

import org.junit.Test;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.runner.RunWith;

import org.junit.runners.JUnit4;

 

import org.shouke.demo.BinarySearch;

 

//@RunWith(SpringRunner.class)

@RunWith(JUnit4.class)

//@SpringBootTest

//@TestPropertySource("classpath:test-application.properties")

public class BinarySearchTest {

 

   private BinarySearch binarySearch = new BinarySearch();

 

   private long[] array1 = new long[] {};

 

   

   @Test

   public void testBinarySearch1() {

       System.out.println("执行方法 testBinarySearch1");

 

    int index = binarySearch.binarySearch(array1, 401L);

       Assert.assertEquals(-1, index);

 

   }

 

   private long[] array2 = new long[] {123L,123L,123L,123L,123L,123L,123L,123L};

   

   @Ignore

   public void testBinarySearch2() {

       System.out.println("执行方法 testBinarySearch2");

    int index = binarySearch.binarySearch(array2, 401L);

       Assert.assertEquals(-1, index);

   }

 

 private long[] array3 = new long[] {123L, 456L};

 

 

 @Test

 public void testBinarySearch3() {

     System.out.println("执行方法 testBinarySearch3");

 int index = binarySearch.binarySearch(array3, 401L);

     Assert.assertEquals(-1, index);

 }

 

 private long[] array4 = new long[] {123L, 456L};

 

 

 @Test

 public void testBinarySearch4() {

     System.out.println("执行方法 testBinarySearch4");

     

     int index = binarySearch.binarySearch(array4, 40L);

     Assert.assertEquals(-1, index);

 }

 

 

 private long[] array5 = new long[] {123L, 456L};

 

 @Test

 public void testBinarySearch5() {

     System.out.println("执行方法 testBinarySearch5");

 

 int index = binarySearch.binarySearch(array5, 123L);

     Assert.assertEquals(0, index);

 }

 

 private long[] array6 = new long[] {123L, 123L};

 

 @Test

 public void testBinarySearch6() {

     System.out.println("执行方法 testBinarySearch6");

 

 int index = binarySearch.binarySearch(array6, 123L);

     Assert.assertEquals(0, index);

 }

 

 

 

 

 @Before

 public void testBeforeMethod() {

     System.out.println("执行每个方法前先执行该函数");

 }

 

 

 

 @After

 public void testAfterMethod() {

     System.out.println("执行完每个方法后都会执行该函数");

 }

 

 

 

 @BeforeClass

 public static void testBeforeClass() {

     System.out.println("执行测试类的所有方法前先执行该函数");

 }

 

 

 

 @AfterClass

 public static void testAfterClass() {

     System.out.println("执行完测试类的所有方法后都会执行该函数");

 }

 

 

}

 

 

被测类Caculator

package org.shouke.demo;

 

 

publicclass Caculator {

 

   publicint caculate(int arg1, int arg2) {

       if (arg1 > arg2) {

        return arg1 - arg2;

       } elseif (arg1 < arg2) {

        return arg1 + arg2;

       } else {

        return arg1;

       }

 

   }

   

 

}

 

测试类CaculatorTest

package org.keshou.test;

 

import org.junit.Assert;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.junit.runners.Parameterized;

 

import org.shouke.demo.Caculator;

import java.util.Arrays;

import java.util.Collection;

 

@RunWith(Parameterized.class)

public class CaculatorTest {

 

   private Caculator caculator = new Caculator();

 

   public int arg1;

   public int arg2;

   

   public CaculatorTest(int arg1, int arg2) {

    this.arg1 = arg1;

    this.arg2 = arg2;

   }

   

//  @Parameterized.Parameters

   @Parameterized.Parameters(name = "{index}: (arg1: {0} arg2: {1}")

   public static Collectiondata() {

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

              { 10, 1}, { 5, 1 }

      });

   }

 

 

 

   @Test

   publicvoid testCaculate1() {

    int result = caculator.caculate(arg1, arg2);

    System.out.println("执行方法 testCaculate1  参数:" + arg1 + " " + arg1);

    Assert.assertEquals(result, arg1-arg2);

   }

 

 

   @Test

   publicvoid testCaculate2() {

    int result = caculator.caculate(arg1, arg2);

    System.out.println("执行方法 testCaculate2   参数:" + arg1 + " " + arg1);

    Assert.assertEquals(result, arg1+arg2);

   }

}

 

说明:被@Parameters 注解修饰用于提供参数的方法有多少个参数,那么就需要为其所在类提供对应数量的类属性,及一个包含对应数量的参数的构造函数,否则会报错:java.lang.IllegalArgumentException: wrong number of arguments

 

 

 

测试套件类RunAllTestClass

package org.keshou.test;

 

import org.junit.runner.RunWith;

import org.junit.runners.Suite;

 

 

@RunWith(Suite.class)

@Suite.SuiteClasses({CaculatorTest.class, org.shouke.test.BinarySearchTest.class})

public class RunAllTestClass {

 

}

 

说明:如果需要运行多个测试类,只需要把目标测试类名称.class放入如下的 {}中即可,测试类之间使用逗号分隔,如果不是同一个包中的测试类,记得加上对应的package名称,或者使用import提前导入对应类。

 

@Suite.SuiteClasses({A.class, B.class, ...})

 

 

 

运行单元测试

如下图,右键整个项目、单个测试类、测试套件 ->  Coverage As  ->  JUnit Test

 

或者

如下图,右键整个项目、单个测试类、测试套件 -> Run As  ->  JUnit Test

 

 

 

 

 

说明:

1、如果右键时选择的是整个项目,那么项目src\test\;font-size:10.5000pt;mso-font-kerning:0.0000pt;">目录下的都有测试类都会被执行。

 

2、Coverage as 和 Run as 这两种运行方式的区别在于前者运行完成,会在控制台端自动打开 Coverage 界面,展示覆盖率,后者需要手动打开,打开方式如下:

Window -> Show View -> Java -> Coverage

 

 

 

运行结果展示

 

运行测试套件

 

 


目录
相关文章
|
5月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
478 1
|
4月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
4月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
995 2
|
5月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
192 1
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
183 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
306 5
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
533 3