IntelliJ测试失败,Gradle测试正常:无法识别'test / resources'中的JSON文件

时间:2016-09-08 08:25:13

标签: java android-studio intellij-idea gradle classpath

在一个项目中,我想在我的测试类中使用src / test / resources中的一些示例JSON文件。如果您想亲自测试,可以在https://github.com/kamikat/moshi-jsonapi找到该项目。项目设置如下所示: project setup

在我的测试中,我加载了这样的资源文件:

public static String readResource(String resourceName) {
    Scanner scanner = new Scanner(TestResources.class.getResourceAsStream(resourceName), "UTF-8");
    return scanner.useDelimiter("\\A").next();
}

public static String getPrivateSample() {
    return readResource("/private.json");
}

到目前为止,这么好。要将* .json文件添加到我的类路径,我需要将它添加到build.gradle文件中:

sourceSets {
    test {
        resources {
            srcDir "resources"
            includes["**/*.json"]
        }
    }
}

现在我可以运行./gradlew test,所有测试都是绿色的 - 太棒了! 但是:如果我从IntelliJ(Android Studio 2.2 RC1)运行测试,会发生以下情况:

java.lang.NullPointerException: source

    at java.util.Objects.requireNonNull(Objects.java:228)
    at java.util.Scanner.<init>(Scanner.java:578)
    at moe.banana.jsonapi2.TestResources.readResource(TestResources.java:8)
    at moe.banana.jsonapi2.TestResources.getPrivateSampleSerialized(TestResources.java:17)
    at moe.banana.jsonapi2.PrivateAndProtectedTest.serializePrivate(PrivateAndProtectedTest.java:58)
    at [...]

问题似乎是当从IntelliJ运行测试时,JSON文件未添加到类路径中。我可以通过在项目设置中将资源添加为手动依赖项来暂时解决此问题,但我正在寻找自动化解决方案。

我已经尝试了thisthisthis,但没有任何效果。 一些答案表明它是bug in IntelliJ,标记为“固定” - 但仍然没有合适的解决方案适合我。

有没有人让他的测试资源正常工作?

2 个答案:

答案 0 :(得分:0)

您可以让IDEA使用gradle运行测试:

档案 - &gt;设置 - &gt;构建,执行,部署 - &gt;构建工具 - &gt; Gradle - &gt;亚军 - &gt;使用以下方法运行测试:Gradle Test Runner

答案 1 :(得分:0)

这当然与您的.idea文件夹有关。尝试备份项目的当前.idea,将其从项目根目录中删除,然后再次在IDEA中将其打开,以便生成一个新的设置文件夹。然后开始将您的设置从备份文件夹迁移到新文件夹(至少有意义的文件夹)。

我只是使用这种方法在环境中解决了这个问题(正在运行Java测试,但无法识别测试资源)。