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

 

 

 

运行结果展示

 

运行测试套件

 

 


目录
相关文章
|
29天前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
32 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
7天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
17天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
20 5
|
2月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
18 0
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
|
2月前
|
SQL JavaScript 前端开发
基于Java访问Hive的JUnit5测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Java、来开发Hive应用的方法,产生的代码如下
70 6
|
3月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
45 2
|
3月前
|
测试技术
如何使用 JUnit 测试方法是否存在异常
【8月更文挑战第22天】
45 0
下一篇
无影云桌面