在Gradle项目中使用Junit和Mockito动态测试文件(XML,JSON,CSV,TXT)的测试数据



我目前与与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

相关内容

  • 没有找到相关文章

最新更新