2016-08-25 4 views
3

Я создал проект Spring, и я получил исключение при запуске следующего теста.

package com.company.app; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

import static org.junit.Assert.assertEquals; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:spring/spring-config.xml"}) 
public class CheckTest { 

    @Test 
    public void test_foo() { 
     assertEquals(0, 1); 
    } 
} 

Исключение составляет следующее.

Exception in thread "main" java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException 
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTestMethod(SpringMethodRoadie.java:281) 
    at org.springframework.test.context.junit4.SpringMethodRoadie$2.run(SpringMethodRoadie.java:207) 
    at org.springframework.test.context.junit4.SpringMethodRoadie.runBeforesThenTestThenAfters(SpringMethodRoadie.java:254) 
    at org.springframework.test.context.junit4.SpringMethodRoadie.runWithRepetitions(SpringMethodRoadie.java:234) 
    at org.springframework.test.context.junit4.SpringMethodRoadie.runTest(SpringMethodRoadie.java:204) 
    at org.springframework.test.context.junit4.SpringMethodRoadie.run(SpringMethodRoadie.java:146) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.invokeTestMethod(SpringJUnit4ClassRunner.java:151) 
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:59) 
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:52) 
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34) 
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44) 
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:50) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
Caused by: java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 22 more 

Я обнаружил, что AssumptionViolatedException находился в org.junit.AssumptionViolatedException вместо org.junit.Assume, я думаю, может быть, это причина, почему было сгенерировано исключение.

Но если удалить следующие аннотации линии, она будет работать нормально

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:spring/spring-config.xml"}) 

Выход:

java.lang.AssertionError: 
Expected :0 
Actual :1 

Большинство ответов я получил из Интернета сказал мне, что я должен использовать JUnit и весенний тест с более высокой версией. Но я думаю, что я использую самые высокие версии для них обоих.

junit: 4.12 
spring-test: 4.3.2.RELEASE 

Есть ли какие-либо другие меры, которые я должен сделать, чтобы заставить его работать? Или это просто ошибка?

+1

Судя по ошибке версии JUnit вы думаете, что вы используете не фактическая версия, которую вы используете. Проверьте свои зависимости ... –

ответ

3

Вы на самом деле не с использованием spring-test 4.3.2.

Скорее, у вас есть очень старый версия spring-test на вашем пути к классу.

SpringMethodRoadie был введен в Spring 2.5 для поддержки JUnit 4.4, и если я правильно помню, SpringMethodRoadie был удален весной 3.0 с обновлением до JUnit 4.5.

Решение заключается в настройке вашей сборки или IDE для использования правильной версии spring-test.

С уважением,

Сэм (автор Spring Framework TestContext)

+0

Я добавил две 'spring-test' зависимости в' pom.xml', и он использовал более старый, он работал после того, как я удалил более старую зависимость, спасибо. – Searene

Смежные вопросы