单元测试_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

 

 

 

运行结果展示

 

运行测试套件

 

 


目录
相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
251 1
|
3月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
366 0
|
23天前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
1月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
628 2
|
2月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
5月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
536 0
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
8月前
|
Java 测试技术 Android开发
课时148:junit测试工具
课时148介绍了JUnit测试工具的使用,包括定义、配置和编写测试程序。JUnit是流行的用例测试工具,用于确保代码稳定性。
126 0
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
222 5

热门文章

最新文章