microsoft / vscode-java-test

Run and debug Java test cases in Visual Studio Code.
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test
Other
295 stars 127 forks source link

When I run the spring source code test class, I get an error: No tests fount with test runner 'JUnit 5' #1675

Open chang6666 opened 6 months ago

chang6666 commented 6 months ago

as title,When I run the spring source code test class, I get an error: No tests fount with test runner 'JUnit 5' CleanShot 2024-03-27 at 09 41 53@2x eg:spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java

jdneo commented 6 months ago

Is your java file name the same as your test primary class name? e.g.

class AbstractPropertyAccessorTests {
...
}
chang6666 commented 6 months ago

@jdneo yes it is the same,I run the same code in idea without any exception,The source code address is at https://github.com/spring-projects/spring-framework/blob/6.1.x/spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java

jdneo commented 6 months ago

wait, what's the version of the test runner extension you are using? We've deprecated the code lens shortcuts for years.

chang6666 commented 6 months ago

@jdneo
CleanShot 2024-03-27 at 17 05 52@2x

jdneo commented 6 months ago

Where do those Run Test | Debug Test come from? I don't understand. We are using gutter icon now. Do you install other java extension?

chang6666 commented 6 months ago

@jdneo Now that I have removed other test plug-ins, I still get an error CleanShot 2024-03-28 at 11 31 51@2x

jdneo commented 6 months ago

Thank you. I need to make some investigation. Highly likely that we could not handle abstract test class.

To reproduce, simply use:

public abstract class AbstractTest {

    @Test
    void testName() {

    }
}
jrg94 commented 3 weeks ago

Is the extension able to handle test cases in an abstract class? We recently shifted from Eclipse to VSCode. The following example test file matches your example above:

public abstract class QueueTest {

    /**
     * Invokes the appropriate {@code Queue} constructor for the implementation
     * under test and returns the result.
     *
     * @return the new queue
     * @ensures constructorTest = <>
     */
    protected abstract Queue<String> constructorTest();

    /**
     * Invokes the appropriate {@code Queue} constructor for the reference
     * implementation and returns the result.
     *
     * @return the new queue
     * @ensures constructorRef = <>
     */
    protected abstract Queue<String> constructorRef();

    @Test
    public final void testNoArgumentConstructor() {
        /*
         * Set up variables and call method under test
         */
        Queue<String> q = this.constructorTest();
        Queue<String> qExpected = this.constructorRef();
        /*
         * Assert that values of variables match expectations
         */
        assertEquals(qExpected, q);
    } 
}

The tests correctly have run buttons next to the line numbers, but clicking them raises an error (i.e., no tests found with testrunner JUnit 4). The class that inherits these tests can be executed just fine. I've been trying to figure out a workaround because my students often click these run buttons and wonder what's wrong.

For the record, switching to JUnit 5 actually makes the issue worse. Test failures no longer show alongside the correct test case and instead all of them show up on the class declaration line.

I can open another issue if this is not the appropriate location.