TypeNotPresentException при запуске тестового примера Android с robolectric и eclipse

У меня есть следующий тестовый пример, настроенный в тестовом проекте Android, над которым я работаю.

package com.whatever.test;

import static org.junit.Assert.fail;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.xtremelabs.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class SomeClassTest {

  @Test
  public void testFromJson() {
    fail("Not yet implemented");
  }

}

Я настроил конфигурацию запуска junit, она работает с junit4, и я пробовал как с Java 6 (mac os x по умолчанию), так и с oracle jdk 7.

Как бы я ни пытался, я всегда получаю следующую ошибку

    java.lang.TypeNotPresentException: Type com.xtremelabs.robolectric.RobolectricTestRunner not present
at sun.reflect.annotation.TypeNotPresentExceptionProxy.generateException(TypeNotPresentExceptionProxy.java:28)
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:57)
at $Proxy4.value(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
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)

    Caused by: java.lang.ClassNotFoundException: com.xtremelabs.robolectric.RobolectricTestRunner
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:95)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:107)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31)
at sun.reflect.annotation.AnnotationParser.parseSig(AnnotationParser.java:370)
at sun.reflect.annotation.AnnotationParser.parseClassValue(AnnotationParser.java:351)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:280)
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.getAnnotation(Class.java:3029)
at org.junit.internal.builders.IgnoredBuilder.runnerForClass(IgnoredBuilder.java:13)
... 12 more

Я использую последнюю версию Android SDK (уровень API 17), входящую в пакет adt, и использую robolectric 1.1 в качестве внешнего JAR-файла.

Я открыт для альтернатив, если выполнение тестов с eclipse таким образом не является лучшим.

Изменить: мне предложили проверить, что Robolectric стоит перед Android в пути к классам, что я и сделал. И проблема сохраняется.

Редактировать 2: я следовал предложениям в комментариях, но ни одно из них не сработало, ошибка не устранена.


person Fran    schedule 16.01.2013    source источник
comment
Трудно точно знать, что происходит не так. Похоже, произошла ошибка конфигурации, можете ли вы предоставить дополнительную информацию о том, как она импортируется в eclipse? Похоже, вы получаете ClassNotFound при попытке запустить его. У меня была проблема, когда JUnit4 нужно было импортировать до android. Это то, что нужно проверить. Взгляните на: pivotal.github.com/robolectric/eclipse-quick-start. .html Убедитесь, что вы следовали инструкциям. Попробуйте создать новый проект и заставьте его работать, а затем выясните, чем он отличается от вашего.   -  person Joe    schedule 19.01.2013
comment
Похоже на проблему пути к классам, попробуйте использовать robolectric-1.1-jar-with- dependencies.jar, вам также могут понадобиться файлыharmcrest.jar и maps.jar.   -  person yorkw    schedule 23.01.2013
comment
Я пробовал оба варианта, и ни один из них не работал. Боюсь, что я еще что-то делаю не так, но не могу найти, что именно.   -  person Fran    schedule 24.01.2013
comment
Как проект расположен по сравнению с целевым проектом? Роболетрику нужен доступ к вашему манифесту и т. д. По умолчанию предполагается плоская структура Iirc. Вы можете расширить testrunner, чтобы изменить путь. Вам также понадобится файл XML или что-то еще.   -  person MrChaz    schedule 25.01.2013
comment
MrChaz, я тоже пробовал все это безуспешно, я просто пытаюсь. Я собираюсь следовать по пути выбранного ответа и исследовать немного больше. Спасибо всем за ваше время и усилия.   -  person Fran    schedule 25.01.2013


Ответы (1)