使用Gradle在JUnit测试中访问主程序中的资源

时间:2018-02-25 06:07:15

标签: java gradle junit classpath

我遇到了人们似乎经常遇到的问题。我需要访问我的主类资源文件夹中的一些资源(即迁移)。

This帖子谈论,但提议的解决方案不起作用。我的JUnit测试无法使用src/main/resources中的资源。

This帖子有一个引用Maven的解决方案,因为我在Gradle土地上,所以对我没什么好处。

作为参考,以下代码工作

public class ConnectorTests {

  @Before
  public void initialize() throws SQLException {
    Reader vendorSql = new InputStreamReader(
        this.getClass().getResourceAsStream(
            "/migrations/V0__create_vendor_table.sql"));

它给出了一个预期的空指针异常,因为找不到该文件。

我可以确认这是问题,因为通过将有问题的文件复制到src/test/resources/migrations,它可以正常工作。这并不理想,因为这意味着当我更改或添加迁移时,我还有一个额外的步骤。

我是否需要在Gradle中进行一些类路径voodoo以使其正常工作?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用google guava

compile group: 'com.google.guava', name: 'guava', version: '19.0'

然后以这种方式调用您的资源文件夹:

URL url = Resources.getResource("migrations/V0__create_vendor_table.sql");
String text = Resources.toString(url, Charsets.UTF_8);

这对我有用......