JUnit 4: how do I create a suite of packages?

Running junit below throws an exception.

import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; import com.prosveta.backend.daoimpl.AllDaoImplTests; /** * Short desc. * * Longer desc. * * @author Jean-Pierre Schnyder * */ @RunWith(Suite.class) @SuiteClasses({AllDaoImplTests.class,AllServiceImplTests.class}) public class AllBackendTests { } 

Stack trace

 java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:653) at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:460) at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:286) at sun.reflect.annotation.AnnotationParser.parseAnnotation(AnnotationParser.java:222) at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:69) at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:52) at java.lang.Class.initAnnotationsIfNecessary(Class.java:3070) at java.lang.Class.getAnnotations(Class.java:3050) at org.junit.runner.Description.createSuiteDescription(Description.java:72) at org.junit.internal.runners.ErrorReportingRunner.getDescription(ErrorReportingRunner.java:25) at org.junit.runner.Runner.testCount(Runner.java:38) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.countTestCases(JUnit4TestClassReference.java:30) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.countTests(RemoteTestRunner.java:487) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:455) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Thanks for your reply!

+4
source share
4 answers

I finally found a way to do what I wanted to achieve by running the junit 4 suite, i.e. by running all tests in all project modules with multiple modules. To do this, use the Johannes Link ClassPathSuite tool.

Download the jar, install it in your maven repo, create an allTests project, which depends on your other projects that your units live in, and create an AllTestClass. Below is a snippet of code and scn to illustrate the solution:

Install the jar in your maven repository

enter image description here

Create project allTests

enter image description here

pom ...

 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.prosveta.backend</groupId> <artifactId>alltests</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.prosveta.backend</groupId> <artifactId>serviceimpl</artifactId> <version>1.0-SNAPSHOT</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.prosveta.backend</groupId> <artifactId>daoimpl</artifactId> <version>1.0-SNAPSHOT</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.prosveta.backend</groupId> <artifactId>model</artifactId> <version>1.0-SNAPSHOT</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.junit.extensions</groupId> <artifactId>cpsuite</artifactId> <version>1.2.5</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <type>jar</type> <scope>compile</scope> </dependency> </dependencies> 

Add Dependencies to Eclipse ...

enter image description here

, and here is the whole class of tests

 package com.prosveta.backend.serviceimpl; import org.junit.extensions.cpsuite.ClasspathSuite; import org.junit.runner.RunWith; @RunWith(ClasspathSuite.class) public class AllBackendTests { } 

which you just run as JUnit.

+6
source

If you are using eclipse; Project Properties (right click on the project) / Java Build Path / Project / .... Add your test projects and run again :)

+2
source

This exception usually occurs when a test uses a class that is not in the classpath. Just make sure your classpath is set correctly.

+2
source

I had the same problem when I tried to run some tests using spring framework.

If you are working on a Maven project, try adding this dependency:

 <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> 

This is my whole pom.xml

 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-core</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-library</artifactId> <version>1.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.0.RELEASE</version> <scope>test</scope> </dependency> </dependencies> 

This configuration works correctly for me.

0
source

Source: https://habr.com/ru/post/1345142/


All Articles