java - 在 gradle 项目中使用 Junit 和 Mockito 动态测试文件(xml、json、csv、txt)中的测试数据

标签 java mockito junit5

我目前正在完成一项与 Junit 和 mockito 相关的任务。

当前状态: 我的一位同事使用 Junit 、 Mockito 和 Gradle 开发了一些测试用例。现在,在开发代码时,他在测试条件时做了什么,他已将值作为硬编码传递,但现在有一个新的更改请求(CR)

假设: 我们假设所有硬编码值都将存储在某个资源文件夹中。现在这个资源文件夹将包含任何类型的文件,因为数据可以是 Json、Xml、CSv、txt 或任何类型。

要求: 我们想要从任何类型的文件(Json、Xml、CSV、txt)中读取这些数据并解析它,然后我们需要使用注释添加这些数据,而不是在我们使用硬编码的地方使用 getter setter。编码值只是为了隐藏硬编码值,然后使用动态值运行测试用例?

必须做什么才能从文件中读取数据,根据数据类型解析该数据,然后使用注释获取值而不是使用 getter setter?

最佳答案

在 JUnit5 中,您可以使用 csv source 运行参数化测试。您可以看到一个包含内联 csv 值的示例:

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

class PriceCalculatorTest {

  PriceCalculator classUnderTest;

  @BeforeEach
  void setUp() throws Exception {
    classUnderTest = new PriceCalculator();
  }

  @ParameterizedTest
  @CsvSource({"0.0, 13", "5.0, 14", "5.0,26", "15.0,27", "15.0,64", "10.0,65"})
  void testGetPrice(double expected, int age) {
    assertEquals(expected, classUnderTest.getPrice(age), 0.01D);
  }
}

如果您想使用外部数据文件,则语法略有不同:

@CsvFileSource(resources = "/two-column.csv", numLinesToSkip = 1)

这假设您使用的是第一行包含标题的 csv 文件。如果您想使用其他文件格式,您需要实现自己的ArgumentsProvider

关于java - 在 gradle 项目中使用 Junit 和 Mockito 动态测试文件(xml、json、csv、txt)中的测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227174/

相关文章:

java - 跨方法的 Hibernate session 和事务

java - 如何模拟 DriverManager.getConnection(...)?

spring - 是否可以使用 Spring ApplicationContext 中的 bean 参数化 JUnit Jupiter 测试?

java - 在 JUnit 5 中使用 Allure 进行测试报告

java - 如何正确使用Java的Observable和Observer与JPA实体?

JavaFX 全屏舞台调整大小

java - 实现此 Java "byte[] to Hex"类的 Scala 方式是什么

java - MockMvc Controller 测试并返回 NullPointerException

java - Mockito 注入(inject)嵌套 bean

java - 如何在 Gradle 中运行 JUnit 5 和 JUnit 4 测试套件?