2011-03-24 52 views
4

运行下面的junit会引发异常。JUnit 4:如何创建一套套件?

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 { 
} 

堆栈跟踪

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) 

谢谢您的回答!

回答

2

如果你使用eclipse;项目属性(右键单击项目)/ Java Build Path/Project/....添加您的测试项目..并再次运行:)

6

我终于找到了一种方法来实现我想通过运行junit 4套件套件,即在多模块项目的所有模块中运行所有测试。要做到这一点,请使用Johannes Link ClassPathSuite tool

下载jar,将它安装到你的maven仓库中,创建一个allTests项目,这个项目取决于你的junit驻留的其他项目并创建一个AllTestClass。下面是一些代码和SCN捕获来说明解决方案:

安装JAR到你的maven回购

enter image description here

创建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> 

添加依赖在Eclipse中...

enter image description here

这里是所有测试类

package com.prosveta.backend.serviceimpl; 

import org.junit.extensions.cpsuite.ClasspathSuite; 
import org.junit.runner.RunWith; 

@RunWith(ClasspathSuite.class) 
public class AllBackendTests { 
} 

你只是“作为JUnit运行”。

+0

+1很好的答案。顺便说一句,我已经按照你在问题中描述的方式工作了。如果我没有记错的话,那个项目使用了ANT,想要的套件(大部分时间AllTestsSuite)都是作为jUnit ANT任务的参数给出的。 – kaskelotti 2012-06-27 05:59:04

2

当测试使用不在类路径中的类时,通常会引发此异常。只要确保你的类路径设置正确。

+0

天哪,这个异常几乎和Oracle错误信息一样有用,那么! :) – nsandersen 2016-11-08 19:13:11

相关问题