我目前与与junit和ockito相关的任务对齐。
当前状态:我的一位同事使用Junit,Mockito和Gradle开发了一些测试用例。现在,在开发代码时,他在测试条件时所做的工作时,他已经通过硬编码了,但是现在有一个新的更改请求(CR)
假设:我们假设所有硬编码的值都将存储在某些资源文件夹中。现在,此资源文件夹将包含任何类型的文件,因为数据可能是JSON,XML,CSV,TXT或任何内容。
要求:我们想从文件中读取这些数据,这些数据可能是任何类型(JSON,XML,CSV,TXT)分析的,然后我们需要使用注释添加此数据而不使用Getter Setter在此处使用Hard-the Hard-编码值只是为了隐藏硬编码值,然后使用动态值运行测试用例?
必须采取什么措施才能从文件中读取数据,根据数据类型解析数据,然后使用注释获得值而不是使用Getter Setter?
在junit5中您可以使用CSV源运行参数化测试。您可以看到一个带有内联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
。