首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin Junit5 ValueSource作为数组变量

基础概念

JUnit 5 是一个流行的 Java 测试框架,用于编写和运行单元测试。Kotlin 是一种运行在 Java 虚拟机(JVM)上的静态类型编程语言,可以与 Java 代码互操作。ValueSource 是 JUnit 5 中的一个注解,用于提供测试方法的参数值。

相关优势

  • 类型安全:Kotlin 提供了编译时类型检查,减少了运行时错误。
  • 简洁性:Kotlin 的语法更加简洁,减少了样板代码。
  • 互操作性:Kotlin 可以无缝地与 Java 代码和库集成。
  • 扩展性:Kotlin 支持扩展函数,可以在不修改原始类的情况下增加功能。

类型

ValueSource 可以用于多种类型的参数,包括基本数据类型、字符串、数组等。

应用场景

当你需要为测试方法提供一组固定的参数值时,可以使用 ValueSource。例如,测试一个函数在不同输入下的行为。

示例代码

以下是一个使用 Kotlin 和 JUnit 5 的示例,展示了如何使用 ValueSource 作为数组变量:

代码语言:txt
复制
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import kotlin.test.assertEquals

class ArrayTest {

    @ParameterizedTest
    @ValueSource(strings = ["array1", "array2", "array3"])
    fun testArrayElement(element: String) {
        val array = arrayOf("array1", "array2", "array3")
        assertEquals(array.contains(element), true)
    }
}

参考链接

常见问题及解决方法

问题:ValueSource 注解未生效

原因:可能是由于 JUnit 5 的依赖未正确添加到项目中。

解决方法:确保在项目的构建文件中添加了 JUnit 5 的依赖。例如,在 Gradle 中:

代码语言:txt
复制
dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1")
}

问题:ValueSource 提供的参数类型不匹配

原因:ValueSource 注解中指定的参数类型与测试方法的参数类型不匹配。

解决方法:确保 ValueSource 注解中指定的参数类型与测试方法的参数类型一致。例如,如果测试方法需要一个字符串数组,ValueSource 应该提供字符串数组。

代码语言:txt
复制
@ParameterizedTest
@ValueSource(strings = ["array1", "array2", "array3"])
fun testArrayElement(element: String) {
    // 测试代码
}

通过以上方法,可以解决在使用 Kotlin 和 JUnit 5 时遇到的常见问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring学习笔记(二十八)——springboot单元测试&JUnit5

JUnit5 的变化 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库 作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。...数组断言 通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等 @Test @DisplayName("array assertion") public void array...异常断言 在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的。...: 表示为参数化测试提供一个枚举入参 * @CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参 * @MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流...如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。

1.3K10
  • SpringBoot2---单元测试(Junit5

    单元测试 JUnit5 的变化 JUnit5常用注解 常用注解使用演示 断言机制(assertions) 1、简单断言 2、数组断言 3、组合断言 4、异常断言 5、超时断言 6、快速失败 4、前置条件...(assumptions) 5、嵌套测试 6、参数化测试 Junit4到Junit5的迁移指南 ---- JUnit5 的变化 Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库...通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等 是逻辑相等,也就是equals,不是地址相等,即==对于数组就是数组元素一致 @Test @DisplayName...), () -> assertTrue(1 > 0) ); } ---- 4、异常断言 在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的...如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。

    1.3K20

    Spring Boot中使用JUnit5进行单元测试

    作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。...通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等 @Test @DisplayName("array assertion") public void array(...1), () -> assertTrue(1 > 0) ); } (4) 异常断言 在JUnit4时期,想要测试方法的异常情况时,需要用@Rule注解的ExpectedException变量还是比较麻烦的...利用@ValueSource等注解,指定入参,我们将可以使用不同的参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。...如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。

    1.4K30

    JUnit5学习之六:参数化测试(Parameterized Tests)基础

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于《JUnit5学习》系列 《JUnit5学习》...Assertions类 按条件执行 标签(Tag)和自定义注解 参数化测试(Parameterized Tests)基础 参数化测试(Parameterized Tests)进阶 综合进阶(终篇) 本篇概览 本文是《JUnit5...数据源 ValueSource是最简单常用的数据源,支持以下类型的数组: short byte int long float double...char boolean java.lang.String java.lang.Class 下面是整形数组的演示: @Order(2) @DisplayName...,通常要考虑入参为null的情况,此时ValueSource一般会这样写: @ValueSource(strings = { null, "a", "b", "c" }) 此时可以使用@NullSource

    90220

    SpringBoot2核心技术-单元测试

    通过 assertArrayEquals 方法来判断两个对象或原始类型的数组是否相等 @Test @DisplayName("array assertion") public void array()...+ 1), () -> assertTrue(1 > 0) ); } 4、异常断言 在JUnit4时期,想要测试方法的异常情况时,需要用**@Rule注解的ExpectedException变量还是比较麻烦的...而JUnit5提供了一种新的断言方式Assertions.assertThrows()** ,配合函数式编程就可以进行使用。...: 表示为参数化测试提供一个枚举入参 @CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参 @MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流...如:CSV,YML,JSON 文件甚至方法的返回值也可以作为入参。只需要去实现ArgumentsProvider接口,任何外部文件都可以作为它的入参。

    64320

    JUnit5学习之七:参数化测试(Parameterized Tests)进阶

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于《JUnit5学习》系列 《JUnit5学习》...ArgumentsSource,并指定MyArgumentsProvider: @Order(15) @DisplayName("ArgumentsProvider接口的实现类提供的数据作为入参...其实JUnit5并没有严格要求,而事实上JUnit5是可以做一些自动或手动的类型转换的; 如下代码,数据源是int型数组,但测试方法的入参却是double: @Order(16) @DisplayName...("int型自动转为double型入参") @ParameterizedTest @ValueSource(ints = { 1,2,3 }) void argumentConversionTest...ArgumentsAccessor类型作为入参,就能在方法内部取得CSV记录的所有字段,效果如下图,可见CSV字段实际上是保存在ArgumentsAccessor实例内部的一个Object数组中:

    97930

    从零玩转系列之SpringBoot3-基础特性

    Profile 配置文件application-{profile}.properties可以作为指定环境的配置文件。激活这个环境,配置就会生效。...我们可以使用各种外部配置源,包括Java Properties文件、YAML文件、环境变量和命令行参数。...测试4.2.0 组件测试直接@Autowired容器中的组件进行测试4.2.1 注解JUnit5的注解与JUnit4的注解有所变化https://junit.org/junit5/docs/current...assertNull 判断给定的对象引用是否为 null assertNotNull 判断给定的对象引用是否不为 null assertArrayEquals数组断言...@CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参@MethodSource:表示读取指定方法的返回值作为参数化测试入参(注意方法返回需要是一个流)@ParameterizedTest

    49620

    spring junit单元测试

    项目情况 首先是背景,项目是一个较大型的项目,多个团队协作开发,采用的是SpringCloud作为基础微服务的架构,中间件涉及Redis,MySQL,MQ等等。...junit5正式版本的发布日期是2017年9月11日,目前最新的版本是5.5.2(2019年9月9日)。我们项目底层选择了junit5。...System.out.println("id="+id+" name="+name+" tORf="+t); merchantController.forTest(null); } 首先看变量的部分...代码当中实际上也提到了,就是junit5提供的@ParameterizedTest注解,配合@ValueSource, @CsvSource来使用,分别可以设置指定类型或者复杂类型到单元测试中,使用方法的参数接受...单元测试的执行 单元测试的执行实际上分成2部分: IDE中我们要去验证单元测试是否能够成功执行 CI/CD作为执行的先决条件保障 IDE可以直接指定测试框架,我们选择junit5直接生成单元测试代码,可以直接在测试包或者类上右键执行单元测试

    1K60

    如何用Junit5玩出参数化测试的新花样?

    简介 这是之前一篇文章《用junit5编写一个类ZeroCode的测试框架》的续集。主要将在之前工作的基础上,围绕参数化测试展开。...框架主要设计点: 一个用例是一个测试文件 一个用例集是一个目录 用例全部在文件中呈现,不需要写代码 主要使用的是 Junit5提供的@ParameterizedTest 引入参数化 为了能使用Junit5...在一般的参数化测试介绍中,通常的方案是将一个文件作为数据源,如一个单一的csv文件,然后其中的某一行作为一个用例。而在我们的方案中,我们需要将整个给定目录中的csv文件作为测试用例集进行遍历执行。...在评估了junit-jupiter-params所提供的下列全新的注解之后, @ValueSource @EnumSource @MethodSource @CsvSource @CsvFileSource...本文提供的简单案例,可以作为参考。

    93430

    如何用Junit5玩出参数化测试的新花样?

    简介 这是之前一篇文章《用junit5编写一个类ZeroCode的测试框架》的续集。主要将在之前工作的基础上,围绕参数化测试展开。...框架主要设计点: 一个用例是一个测试文件 一个用例集是一个目录 用例全部在文件中呈现,不需要写代码 主要使用的是 Junit5提供的@ParameterizedTest 引入参数化 为了能使用Junit5...在一般的参数化测试介绍中,通常的方案是将一个文件作为数据源,如一个单一的csv文件,然后其中的某一行作为一个用例。而在我们的方案中,我们需要将整个给定目录中的csv文件作为测试用例集进行遍历执行。...在评估了junit-jupiter-params所提供的下列全新的注解之后, @ValueSource @EnumSource @MethodSource @CsvSource @CsvFileSource...本文提供的简单案例,可以作为参考。

    1.5K20

    五年了,你还在用junit4吗?

    junit5 JUnit5在2017年就发布了,你还在用junit4吗? 什么是junit5 与以前的JUnit版本不同,JUnit 5由三个不同子项目的多个不同模块组成。...作为JUnit Jupiter的主要变化之一,测试构造函数和方法现在都允许有参数。...最惊艳的提升,强烈推荐使用 @ValueSource: 为参数化测试指定入参来源,支持八大基础类以及String类型,Class类型 @NullSource: 表示为参数化测试提供一个null的入参 @...EnumSource: 表示为参数化测试提供一个枚举入参 @CsvSource:表示读取CSV格式内容作为参数化测试入参 @CsvFileSource:表示读取指定CSV文件内容作为参数化测试入参 @MethodSource...看完用法描述,简直太喜欢了 一个顶三个基础测试用例 @ParameterizedTest @ValueSource(strings = {"one", "two", "three"}) @DisplayName

    1.6K40

    Java单元测试之JUnit 5快速上手

    @RepeatedTest 注解内用 currentRepetition 变量表示已经重复的次数,totalRepetitions 变量表示总共要重复的次数,displayName 变量表示测试方法显示名称...,我们直接就可以使用这些内置的变量来重新定义测试方法重复运行时的名称。...@ValueSource 是 JUnit 5 提供的最简单的数据参数源,支持 Java 的八大基本类型和字符串,Class,使用时赋值给注解上对应类型属性,以数组方式传递,示例代码如下: public...@ArgumentSource:通过实现 ArgumentsProvider 接口的参数类来作为数据源,重写它的 provideArguments 方法可以返回自定义类型的 Stream\ ,作为测试方法所需要的数据使用...参考资料 https://junit.org/junit5/docs/current/user-guide/#overview-getting-started-junit-artifacts https

    1.2K40

    Java单元测试之JUnit 5快速上手

    ,totalRepetitions 变量表示总共要重复的次数,displayName 变量表示测试方法显示名称,我们直接就可以使用这些内置的变量来重新定义测试方法重复运行时的名称。...@ValueSource 是 JUnit 5 提供的最简单的数据参数源,支持 Java 的八大基本类型和字符串,Class,使用时赋值给注解上对应类型属性,以数组方式传递,示例代码如下: public...运行测试,结果如下图所示,针对 @ValueSource 里每个参数都会运行目标方法,一旦哪个参数运行测试失败,就意味着该测试方法不通过。...> ,作为测试方法所需要的数据使用。...参考资料 https://junit.org/junit5/docs/current/user-guide/#overview-getting-started-junit-artifacts https

    1.1K20
    领券