【问题标题】:Accessing resources from the main program in a JUnit test with Gradle使用 Gradle 在 JUnit 测试中从主程序访问资源
【发布时间】:2018-02-25 06:07:14
【问题描述】:

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

This 帖子谈到,但是建议的解决方案不起作用。 src/main/resources 中的资源不适用于我的 JUnit 测试。

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 中做一些类路径巫术才能使其正常工作吗?

谢谢!

【问题讨论】:

    标签: java gradle junit classpath


    【解决方案1】:

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

    这对我有用...

    【讨论】:

    • 这不会还是有同样的问题吗?即 JUnit 查找 src/test/resources 而不是 src/main/resources?
    猜你喜欢
    • 2017-07-05
    • 2023-03-19
    • 2014-08-21
    • 2013-12-08
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多