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

Accessing resources from the main program in a JUnit test with Gradle

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

This post 谈到了,但是建议的解决方案不起作用。 src/main/resources 中的资源对我的 JUnit 测试不可用。

This post 有一个引用 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 中执行一些 classpath voodoo 才能使其正常工作吗?

谢谢!

您可以使用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);

这对我有用...