2

I need to run a jar with all tests in it. I could build all test classes inside jar but I don't know how to boot a main class to run junit tests in springboot. Is it possible I run a command line to run jar and start all test and ignore mainclass.

Test Class

@ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest @TestPropertySource(locations = "classpath:${test.config.env:application-local.properties}") @TestMethodOrder(OrderAnnotation.class) public class RunIntegrationTest { // All tests } 

Pom.xml

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath /> </parent> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <name>...</name> <properties> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <!-- get all compiled class tests into source class --> <testOutputDirectory>target/classes</testOutputDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

What do I need to exec for running all tests from built jar on command line?

 java -jar build-with-class-test-and-junit-in-it.jar # are there more parameters? 

1 Answer 1

1

I've got a solution to run springboot test in jar using junit4 and SpringRunner.

Creating Test Class

import org.junit.FixMethodOrder; import org.junit.Test; // don't use org.junit.jupiter.api.test for this case import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; @RunWith(SpringRunner.class) // using SpringRunner instead of @ExtendWith(SpringExtension.class) @AutoConfigureMockMvc @SpringBootTest @TestPropertySource(locations = "classpath:application-${spring.profiles.active:local}.properties") @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class RunIntegrationTest { @Autowired private MockMvc mockMvc; @Test // ... all integration test @Test // ... all integration test } 

creating file pom-test-jar.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath /> </parent> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <name>...</name> <properties> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <!-- all test class will be compiled with all source --> <!-- <scope>test</scope> --> </dependency> </dependencies> <build> <!-- all test class will be compiled with all source --> <testOutputDirectory>target/classes</testOutputDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- changing launcher to exec junit instead of spring main class --> <mainClass>org.junit.runner.JUnitCore</mainClass> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> </build> </project> 

That's all :)

Let's creating jar with test in it and run all test

# BUILD TEST JAR: mvn -f "pom-test-jar.xml" clean package -DskipTests # RUN TEST INTEGRATION export SPRING_PROFILES_ACTIVE=hom java -jar target/myjar.jar br.com.package.test.RunIntegrationTest unset SPRING_PROFILES_ACTIVE 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.