2017-02-25 54 views
0

我的Java的代码如下所示:TypeNotPresentException与JUnitParamsRunner

Person.java

public class Person { 
private int age; 

public Person(int age) { 
    this.age = age; 
} 

public boolean isAdult() { 
    return age >= 18; 
} 

@Override 
public String toString() { 
    return "Person of age: " + age; 
} 

}

PersonTest.java

import static org.hamcrest.Matchers.is; 
import static org.junit.Assert.assertThat; 

import org.junit.Test; 
import org.junit.runner.RunWith; 

import junitparams.JUnitParamsRunner; 
import junitparams.Parameters; 

@RunWith(JUnitParamsRunner.class) 
public class PersonTest { 

    @Test 
    @Parameters({ 
     "17, false", 
     "22, true" }) 
    public void personIsAdult(int age, boolean valid) throws Exception { 
     assertThat(new Person(age).isAdult(), is(valid)); 
} 
} 

如果我按“运行方式“=>”JUnit测试用例“我得到”java.lang.TypeNotPresentException:Type [unknown] not present“。 这里完整的堆栈跟踪:

java.lang.TypeNotPresentException: Type [unknown] not present 
    at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:46) 
    at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:84) 
    at com.sun.proxy.$Proxy2.value(Unknown Source) 
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 
Caused by: java.lang.NoClassDefFoundError: org/junit/runners/BlockJUnit4ClassRunner 
    at java.lang.ClassLoader.findBootstrapClass(Native Method) 
    at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1015) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:413) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:348) 
    at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) 
    at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) 
    at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) 
    at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:439) 
    at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:420) 
    at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:349) 
    at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) 
    at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) 
    at java.lang.Class.createAnnotationData(Class.java:3521) 
    at java.lang.Class.annotationData(Class.java:3510) 
    at java.lang.Class.getAnnotation(Class.java:3415) 
    at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:10) 
    ... 11 more 

的JUnit版本是4.12

Hamcrest-所有版本是1.3

Hamcrest核心版本为1.3

有谁有意见如何解决这个问题?提前致谢。

+0

我认为你缺少引号“17 假”, “22 真正的” –

+0

它并没有改变任何东西,除了仍然存在。 – user3599233

+0

我把这两个类从这里:https://github.com/Pragmatists/junitparams/wiki/Quickstart – user3599233

回答

0

我现在能够在这里使用这个论坛来解决我自己的问题:https://jira.spring.io/browse/SPR-9450

我使用的库为用户库,但显然这是错误的。当我在我的classpath中使用它作为外部jar时,一切正常。