0

I am not working with Spring\Spring Boot from several years and I am starting a project with this technology so I have some doubts.

I am working on a simple project retrieved from GIT and starting working on it implementing my functionality. It works fine but I have the following doubts.

From command line (into the root directory of my project) I compile it using the command:

mvn clean install

in order to delete the previous version of my application and then compile, test & package again my application.

Then I start my application by this command:

mvn spring-boot:run

And the application correctly starts:

It starts without problem. My doubt is in the previous phase when I perform the mvn clean install command. It performs also the unit tests defined inside the project but all test failed. And here the strange behavior.

I obtain exception like this:

Running com.springboot.excelapi.integration.ExcelResourceUnitTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.001 sec <<< FAILURE! - in com.springboot.excelapi.integration.ExcelResourceUnitTest
initializationError(com.springboot.excelapi.integration.ExcelResourceUnitTest)  Time elapsed: 0 sec  <<< ERROR!
java.lang.Exception: No runnable methods
        at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
        at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)
        at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
        at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
        at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
        at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:138)
        at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
        at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
        at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
        at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
        at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
        at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
        at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
        at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
        at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
        at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

and at the end of the Maven install phase I have the following summary that says that all the tests are failed:

Tests run: 4, Failures: 0, Errors: 2, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.251 s
[INFO] Finished at: 2020-02-16T19:24:02+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1:test (default-test) on project excel-api: There are test failures.
[ERROR]
[ERROR] Please refer to C:\Users\nobil\Documents\workspace-sts-3.9.11.RELEASE\spring-boot-excel-api-master.zip_expanded\spring-boot-excel-api-master\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

The strange thing is that I commented out all the test methods into my JUnit classes. For example the previous error is related to this test class:

package com.springboot.excelapi.integration;

import java.io.IOException;
import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import com.springboot.excelapi.Application;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { Application.class })
@WebAppConfiguration
@ActiveProfiles(profiles = { "no-liquibase" })
public class ExcelResourceUnitTest {

    /*
    @Test
    public void processCompVibrAndTempoExcelTabTest()
    {
        final ExcelService excelService = new ExcelService();

        try {
            excelService.processCompVibrAndTempExcelTab();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    */


}

as you can see this class contains a single test method that is commented out.

So why when I perform the mvn clean install command it seems that it is trying to execute test method that at the moment are disabled by commenting out it?

Turing85
  • 18,217
  • 7
  • 33
  • 58
AndreaNobili
  • 40,955
  • 107
  • 324
  • 596
  • As to the tests failing: I am unsure while the test is executed even when they are commented out. Did you save the changes? But the tests should not be failing in the first place. I would recommend contacting the developer and ask for advice. Remark: you can deactivate tests by e.g. executing `mvn -DskipTests clean install`. – Turing85 Feb 16 '20 at 18:37
  • @Turing85 obviously I saved the code before run the mvn clean install again – AndreaNobili Feb 16 '20 at 18:42
  • Comment to annotations and try again – Youcef LAIDANI Feb 16 '20 at 18:46

1 Answers1

1

If you don’t want to run the test use @Ignore on class or single test method.

It seems that there are still tests that run (4 tests as maven summarizes) so all-in-all probably you shouldn’t always run mvn -DskipTests clean install or at least not always run it because you’ll still want the working tests to run.

Now as for the error, you should have at least one public method annotated with @Test so leave the method but comment out its content (again, IMO its better to use @Ignore as I’ve said before)

Mark Bramnik
  • 39,963
  • 4
  • 57
  • 97