我目前正在完成一项与 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/