测试类上的Maven JUnit测试用例NoClassDefFoundException

测试类上的Maven JUnit测试用例NoClassDefFoundException,junit,junit4,noclassdeffounderror,parameterized,surefire,Junit,Junit4,Noclassdeffounderror,Parameterized,Surefire,我有一个参数化的测试用例,就像测试套件中的一堆其他测试用例一样,我一直在尝试添加它们 package com.example; import com.google.gson.Gson; import com.example.Event; import com.example.LocalStorage; import com.example.TimeMachine; import org.junit.Before; import org.junit.Test; import org.junit

我有一个参数化的测试用例,就像测试套件中的一堆其他测试用例一样,我一直在尝试添加它们

package com.example;

import com.google.gson.Gson;
import com.example.Event;
import com.example.LocalStorage;
import com.example.TimeMachine;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import java.util.Arrays;
import java.util.Collection;

import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;

@RunWith(Parameterized.class)
public class TimeMachineEventEndTimeTest {

    public TimeMachineEventEndTimeTest(Event event, String end_time) {
        _event = event;
        _end_time = end_time;
    }

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
            { _UNSCHEDULED, "" },
            { _NOON_FOR_1_HOUR, "13:00" },
            { _NOON_FOR_HALF_HOUR, "12:30" },
            { _MIDNIGHT_FOR_1_HOUR, "1:00" },
            { _MIDNIGHT_FOR_HALF_HOUR, "0:30" },
            { _MIDNIGHT_FOR_12_HOUR, "12:00" }
        });
    }

    @Before
    public void initialize() throws Exception {
        _time_machine = new _TimeMachine();
    }

    @Test
    public void testEndTimeForEvent() throws Exception {
        assertThat(_time_machine.endTimeForEvent(_event)).isEqualTo(_end_time);
    }

    private TimeMachine _time_machine;
    private final Event _event;
    private final String _end_time;
    private static final Gson _gson = new _GsonProvider(mock(LocalStorage.class)).gson();
    private static final Event _UNSCHEDULED = _gson.fromJson("{}", Event.class);
    private static final Event _NOON_FOR_1_HOUR = _gson.fromJson("{\n" +
        "      \"starttime\" : \"12:00\",\n" +
        "      \"duration\" : \"60\",\n" +
        "    }", Event.class);
    private static final Event _NOON_FOR_HALF_HOUR = _gson.fromJson("{\n" +
        "      \"starttime\" : \"12:00\",\n" +
        "      \"duration\" : \"30\",\n" +
        "    }", Event.class);
    private static final Event _MIDNIGHT_FOR_1_HOUR = _gson.fromJson("{\n" +
        "      \"starttime\" : \"0:00\",\n" +
        "      \"duration\" : \"60\",\n" +
        "    }", Event.class);
    private static final Event _MIDNIGHT_FOR_HALF_HOUR = _gson.fromJson("{\n" +
        "      \"starttime\" : \"0:00\",\n" +
        "      \"duration\" : \"30\",\n" +
        "    }", Event.class);
    private static final Event _MIDNIGHT_FOR_12_HOUR = _gson.fromJson("{\n" +
        "      \"starttime\" : \"0:00\",\n" +
        "      \"duration\" : \"360\",\n" +
        "    }", Event.class);
}
package.com.example;
导入com.google.gson.gson;
导入com.example.Event;
导入com.example.LocalStorage;
导入com.example.TimeMachine;
导入org.junit.Before;
导入org.junit.Test;
导入org.junit.runner.RunWith;
导入org.junit.runners.Parameterized;
导入org.junit.runners.Parameterized.Parameters;
导入java.util.array;
导入java.util.Collection;
导入静态org.fest.assertions.api.assertions.assertThat;
导入静态org.mockito.mockito.mock;
@RunWith(参数化的.class)
公共类TimeMachineEventEndTimeTest{
公共TimeMachineEventEndTimeTest(事件事件、字符串结束时间){
_事件=事件;
_结束时间=结束时间;
}
@参数
公共静态收集数据(){
返回Arrays.asList(新对象[][]{
{{u非预定,“},
{中午1小时,13:00},
{中午半小时,“12:30”},
{午夜1小时,“1:00”},
{午夜半小时,0:30},
{午夜12小时,“12:00”}
});
}
@以前
public void initialize()引发异常{
_时间机器=新的时间机器();
}
@试验
public void testEndTimeForEvent()引发异常{
资产(_time_machine.endTimeForEvent(_event)).isEqualTo(_end_time);
}
私人计时器;
私人最终活动(u活动);;
私有最终字符串\u结束\u时间;
private static final Gson _Gson=new _GsonProvider(mock(LocalStorage.class)).Gson();
私有静态最终事件_UNSCHEDULED=_gson.fromJson(“{}”,Event.class);
私有静态最终事件_NOON_FOR_1_HOUR=_gson.fromJson(“{\n”+
“开始时间”:“12:00”,\n+
“持续时间”:“60\,\n”+
“}”,Event.class);
私有静态最终事件_NOON_FOR_HALF_HOUR=_gson.fromJson(“{\n”+
“开始时间”:“12:00”,\n+
“持续时间”:“30\,\n”+
“}”,Event.class);
私有静态最终事件\u MIDNIGHT\u FOR \u 1\u HOUR=\u gson.fromJson(“{\n”+
“开始时间”:“0:00\,\n”+
“持续时间”:“60\,\n”+
“}”,Event.class);
私有静态最终事件_午夜_半小时=_gson.fromJson(“{\n”+
“开始时间”:“0:00\,\n”+
“持续时间”:“30\,\n”+
“}”,Event.class);
私有静态最终事件_MIDNIGHT_FOR_12_HOUR=_gson.fromJson(“{\n”+
“开始时间”:“0:00\,\n”+
“持续时间”:“360\,\n”+
“}”,Event.class);
}
我有几个结构几乎相同的测试用例,它们在同一个目录和包中测试不同的方法。除此测试用例抛出此堆栈跟踪外,我的所有其他测试都运行并100%通过:

java.lang.NoClassDefFoundError:无法初始化类com.example.TimeMachineEventEndTimeTest 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:186) 位于org.apache.maven.surefire.report.SmartStackTraceParser.getClass(SmartStackTraceParser.java:63) 位于org.apache.maven.surefire.report.SmartStackTraceParser。(SmartStackTraceParser.java:53) 位于org.apache.maven.surefire.common.junit4.JUnit4StackTraceWriter.smartTrimmedStackTrace(JUnit4StackTraceWriter.java:72) 位于org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:328) 位于org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:312) 位于org.apache.maven.surefire.booter.ForkingRunListener.toString(ForkingRunListener.java:258) 位于org.apache.maven.surefire.booter.ForkingRunListener.testError(ForkingRunListener.java:131) 位于org.apache.maven.surefire.common.junit4.JUnit4RunListener.testFailure(JUnit4RunListener.java:111) 位于org.junit.runner.notification.RunNotifier$4.notifyListener(RunNotifier.java:100) 位于org.junit.runner.notification.RunNotifier$SafeNotifier.run(RunNotifier.java:41) 位于org.junit.runner.notification.RunNotifier.fireTestFailure(RunNotifier.java:97) 位于org.junit.internal.runners.ErrorReportingRunner.runCause(ErrorReportingRunner.java:57) 位于org.junit.internal.runners.ErrorReportingRunner.run(ErrorReportingRunner.java:34) 位于org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) 位于org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 位于org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)


可以从IDE运行测试吗?看起来stacktrace有误导性,因为


如果您能提供一个可运行的要点,重现问题,这将非常有帮助。

您能从IDE运行测试吗?看起来stacktrace有误导性,因为


如果你能提供一个重现问题的可运行的要点,这会很有帮助。

如果其他人遇到类似的问题,对我来说,这似乎是我创建一些
事件的最后几行。他们在JSON中有一个小错误,这一定会导致
Gson
在构建它们时出错

 private static final Event _NOON_FOR_1_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"12:00\",\n" +
    "      \"duration\" : \"60\"\n" +
    "    }", Event.class);
private static final Event _NOON_FOR_HALF_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"12:00\",\n" +
    "      \"duration\" : \"30\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_1_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"60\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_HALF_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"30\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_12_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"360\"\n" +
    "    }", Event.class);

纠正措施是删除“持续时间”值之后的“,”。stacktrace似乎非常隐晦,而且确实具有误导性。

如果其他人遇到类似的问题,对我来说,这似乎是我创建一些
事件的最后几行。他们在JSON中有一个小错误,这一定会导致
Gson
在构建它们时出错

 private static final Event _NOON_FOR_1_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"12:00\",\n" +
    "      \"duration\" : \"60\"\n" +
    "    }", Event.class);
private static final Event _NOON_FOR_HALF_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"12:00\",\n" +
    "      \"duration\" : \"30\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_1_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"60\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_HALF_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"30\"\n" +
    "    }", Event.class);
private static final Event _MIDNIGHT_FOR_12_HOUR = _gson.fromJson("{\n" +
    "      \"starttime\" : \"0:00\",\n" +
    "      \"duration\" : \"360\"\n" +
    "    }", Event.class);

纠正措施是删除“持续时间”值之后的“,”。stacktrace似乎非常神秘,而且确实具有误导性。

这是来自Android Studio IDE的。