Vscode-java-test: Run test fails with gradle when tasks that process resources are involved.

Created on 12 Aug 2020  路  4Comments  路  Source: microsoft/vscode-java-test

Inside src/test/resources there is an arquillian.xml file that has to be expanded by gradle at processTestResources task. When a test is run from within vs code, this doesn't happen and the resource file is used as is. This triggers an error from Junit that basically says that some property is invalid (because it's expanded, i.e. junit see it as ${somePropToExpand}).

Same thing occurs when arquillian.xml is auto generated by a plugin - a gradle plugin can auto create it and put it directly in the buildDir/resources/test dir. When a test is run from within vs code, basically the file is invisible to vs code.

Both of these problems can be corrected by having a:

sourceSets {
    test {
        resources {
            srcDirs += "$buildDir/resources/test"
        }
    }
}

But that by itself creates a new set of problems for the build.

bug

Most helpful comment

Here are some findings:

I can repro this issue and I also tried the project in Eclipse and IntelliJ.

In Eclipse, same error when running the test, but it can successfully run if I use the Delegate to Gradle feature.

In IntelliJ, since it will delegate to Gradle by default, so the test runs successfully.

Seems that we need to support Delegate to Gradle at VS Code side.

All 4 comments

The project classpath is resolved by buildship (if it's a Gradle project). To help us better understand the problem, would you mind to share a sample project for this issue to us?

Attaching the most minimal i could produce.

There's only one test class - ArquillianInitTest.

First do a gradle clean test. It should complete successfully.

This initial normal build is set to auto generate arquillian.xml at built time, thus: /tmp/sample/src/test/resources/__arquillian.xml is prefixed with __ to ignore it. Such a build doesn't work when executed from __vscode__, because vscode code thinks this file doesn't exist. But it can be found in $buildDir/resources/test.

Now remove the __ prefix from /tmp/sample/src/test/resources/__arquillian.xml to force gradle to explicitly use it. Make sure you manually set the wlpHome (in my case, project ran from /tmp). The following is observed:

1) when you do gradle clean test it should complete successfully.
2) when run from __vscode__, it will error out because of the properties the need to be expanded. For ex., this is the error i get: java.lang.NumberFormatException: For input string: "${SERVER_PORT}"
3) if you run gradle processTestResources, you can confirm the property expansion works - the files in $buildDir/resources/test have the proper values.
3) src/test/resources/arquillian.xml and src/test/resources/persistence.xml have commented out lines - toggle those so that you directly set the values. When run from __vscode__ it will complete successfully.

sample.tar.gz

Here are some findings:

I can repro this issue and I also tried the project in Eclipse and IntelliJ.

In Eclipse, same error when running the test, but it can successfully run if I use the Delegate to Gradle feature.

In IntelliJ, since it will delegate to Gradle by default, so the test runs successfully.

Seems that we need to support Delegate to Gradle at VS Code side.

I have the same problem. A "Delegate to Gradle" Feature would be great!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jbelford picture jbelford  路  5Comments

andifalk picture andifalk  路  9Comments

gabloe picture gabloe  路  7Comments

sceee picture sceee  路  8Comments

brianngo313 picture brianngo313  路  6Comments