我的 intellij 项目中有一个文件夹,其中有一些 .svg 文件,路径为“data/system/svgfiles1”
我正在对使用这些 .svg 文件的方法进行单元测试。
当我在本地运行测试时,每个测试都正常。
但是,在 Jenkins 中我收到错误。
出现这个错误的原因是我在本地使用了一些测试需要的.svg文件,而它们不在jenkins中。
现在,该方法定义了放置数据的路径。我评论了定义路径的位置。 如您所见,路径是硬编码的。
public Optional<String> content(final Record content, final int sides) {
final Optional<String> path = Utils.findAttachmentPathById(
"./data/" + DataController.Sides[sides], // here I get the path "data/system/svgfiles1"
content.getId()
);
if (!path.isPresent()) {
return Optional.empty();
}
Optional<String> value1 = Optional.empty();
Optional<String> value2 = Optional.empty();
try {
value2 = Optional.of(FileUtils.readFileToString(new File(path.get()), StandardCharsets.UTF_8));
} catch (IOException ioException) {
logger.error("An exception", ioException);
}
try {
value1 = Optional.of(Record.format(value2.get(), content.getData()));
} catch (Exception exception) {
logger.error("An exception", exception);
}
return value1;
}
现在我在测试中创建了一个资源文件夹,在其中添加了这些 .svg 文件。 测试方法是这样的:
@Test
public void exportZipPlateSvgContentTest() {
// prepare
Record record = new Record(recordValues); // record values are only some string values
record.setId(1L);
// expected
Optional<String> expected = Optional.of(values)
// test
Optional<String> result = platesService.content(record, 1); // this is the method under test
// run
assertEquals(expected, result
}
正如您在测试方法中看到的。路径未作为参数给出。该路径是硬编码在 content 方法中的。
因为路径是硬编码在方法中的。该方法是否可以在测试期间使用不同的路径?
就像,当我测试它时说使用“test/resources/data/svgfiles1”中的数据?
我非常感谢任何意见。请让我知道以澄清任何事情。
最佳答案
如果您将文件也复制到src/test/resources
,它应该可以工作。
另一种方法是使用配置属性来指定可以找到文件的位置,并使用 application.properties
和 application-test.properties
来放置不同的文件生产和测试的值。
关于java - 单元测试时如何使用测试资源文件夹中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606576/