2015-03-27 1 views
5

Я знаю, что этот вопрос задавался в разных формах раньше, но я проверил все ответы, и я думаю, мы исключили их всех.IntelliJ NoClassDefFoundError при запуске IntelliJ Tests

Ошибка:

java.lang.NoClassDefFoundError: com/lgc/infra/geometry/Coord1Val 
at com.lgc.infra.geometry.Coords.coord(Coords.java:89) 
at com.lgc.infra.geometry.Coords.<clinit>(Coords.java:24) 
at com.geoteric.lfd.eos.ReallyBasicTest.make_a_simple_coord(ReallyBasicTest.java:17) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:24) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:300) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78) 
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212) 
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
Caused by: java.lang.ClassNotFoundException: com.lgc.infra.geometry.Coord1Val 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    ... 37 more 

Код:

package com.geoteric.lfd.eos; 

import com.lgc.infra.geometry.Coord3; 
import com.lgc.infra.geometry.Coords; 
import org.junit.Test; 

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.junit.Assert.assertThat; 

/** 
* Created by TClarke on 27/03/2015. 
*/ 
public class ReallyBasicTest { 
    @Test 
    public void make_a_simple_coord() 
    { 
     Coord3 c3 = Coords.coord(1.0f, 2.0f, 3.0f); 
     assertThat(c3.getX(), equalTo(1.0)); 
    } 
} 

Путь к файлу классы:

D:\ffa_dev\link-for-decisionspace\ext\dssdk\com_lgc_dsp-core_sdk.jar!\com\lgc\infra\geometry\Coords.class 

Скриншот модуль Структуры:

Скриншот Test Runner Config:

функции, относящиеся Кодовые хорошо, когда встроенный в реальный проект. Итак, какие-нибудь советы о том, что я мог пропустить?

ответ

0

Я думаю, что ваш .iml не обновляется. Вы пробовали повторно создавать файлы проекта/модуля .iml. Если его Maven проект, который вы можете восстановить его с помощью команды

mvn idea:idea 

После .iml обновляется обновить проект и повторно запустить тест

1

Это был upvoted, так что я дам вам знать, что мы в конце концов разработали ,

Мы писали плагин с использованием API для другого приложения. При развертывании плагина он получает доступ ко всем определениям приложения. Тем не менее, модульные тесты выполняются изолированно, поэтому конкретные классы, которые определяются только через интерфейсы и фабрики, не могут быть построены.

Для этого примера:

Coord3 c3 = Coords.coord(1.0f, 2.0f, 3.0f); 

Оба Coord3 и Coords определены. Но com/lgc/infra/geometry/Coord1Val, который используется в Coords, на самом деле не определен в нашем пути к библиотеке (API-фляга была явно построена там, но она не была предоставлена).

Существует несколько возможных обходных решений, которые, как мы надеемся, умные люди, наткнувшись на этот вопрос, будут комментировать некоторые из них. Тот, с которым мы пошли, состоит в том, чтобы обернуть Coords в макет фабрики, которая возвращает mock (Coord3.class), так что части, которые демонстрируют эту проблему, инкапсулируются.