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

 

 

 

运行结果展示

 

运行测试套件

 

 


目录
相关文章
|
3天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
93 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
26天前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
82 35
|
26天前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
42 16
|
2月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
66 13
|
3月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
99 1
|
6月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
4月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
65 5
|
5月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
97 6
|
6月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
101 2
|
6月前
|
测试技术
如何使用 JUnit 测试方法是否存在异常
【8月更文挑战第22天】
157 0

热门文章

最新文章