java - 单元测试时如何使用测试资源文件夹中的数据

标签 java junit

我的 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.propertiesapplication-test.properties 来放置不同的文件生产和测试的值。

关于java - 单元测试时如何使用测试资源文件夹中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60606576/

相关文章:

java - 一个 JFrame 和 50 个 JPanel 还是只有 50 个 JFrame 或其他选择?

java - TestNG 测试重用

jenkins - 如何使用 junit 标记片状测试?

java - 从存储在数组中的行打印选定的数字

java - java.sql.Connection 接口(interface)的实现在哪里?

java - 向 iText PDF block 添加空格

java - 为 webdriver 记录 selenium

database - 在 Maven/Junit/DBUnit 项目的集成测试之前/之后创建/删除数据库的最佳方法?

java - 使用构造函数参数模拟嵌套类并测试方法

java - Selenium 2 Webdriver 与 JUnit 或 TestNG for PageObject 设计模式