JUnit, Mockito 및 Robolectric를 사용하여 단위 테스트를 설정하려고하는 Android 프로젝트가 있습니다. 나는 ADT23을 사용하고있다. (이 게시물을 통해 이클립스 JDT를 수동으로 다운로드해야했기 때문에 이것에 대한 언급이 필요하다 : https://stackoverflow.com/a/25519274/3519951). 위의 모든 것은 Windows 7에서 실행됩니다.NoClassDefFoundError with Robotlectric with ADT23 and Android 15
테스트를 실행할 때 Android보기에서 NoClassDefFoundError 오류가 발생했습니다.
예, 안드로이드 가져 (플랫폼 안드로이드-15)뿐만 아니라, 내 안드로이드 프로젝트로 ... 여기 내 librairies 있습니다
실행 구성 :
- 모든 실행 선택한 프로젝트의 테스트
- 테스트 러너는 JUnit입니다. 4
- Eclipse JUnit Launcher (및 아니요 Android JUnit 테스트 런처)
- 인수 탭에서 테스트중인 프로젝트를 나타내는 $ {workspace_loc : ApplicationLauncherActivity}로 작업 디렉토리를 설정했습니다.
다음은 전체 스택 추적입니다 :
java.lang.NoClassDefFoundError: android/view/View
at com.xtremelabs.robolectric.RobolectricTestRunner.createResourceLoader(RobolectricTestRunner.java:502)
at com.xtremelabs.robolectric.RobolectricTestRunner.setupApplicationState(RobolectricTestRunner.java:357)
at com.xtremelabs.robolectric.RobolectricTestRunner.internalBeforeTest(RobolectricTestRunner.java:307)
at com.xtremelabs.robolectric.RobolectricTestRunner.methodBlock(RobolectricTestRunner.java:285)
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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
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: caught an exception while obtaining a class file for android.view.View
at javassist.Loader.findClass(Loader.java:359)
at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.findClass(RobolectricClassLoader.java:82)
at javassist.Loader.loadClass(Loader.java:311)
at java.lang.ClassLoader.loadClass(Unknown Source)
at com.xtremelabs.robolectric.bytecode.RobolectricClassLoader.loadClass(RobolectricClassLoader.java:59)
... 18 more
Caused by: java.lang.RuntimeException: problem instrumenting public void android.view.View.setContentDescription(java.lang.CharSequence)
at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethod(AndroidTranslator.java:324)
at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethods(AndroidTranslator.java:245)
at com.xtremelabs.robolectric.bytecode.AndroidTranslator.onLoad(AndroidTranslator.java:103)
at javassist.Loader.findClass(Loader.java:340)
... 22 more
Caused by: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15
at javassist.CtClassType.getClassFile2(CtClassType.java:203)
at javassist.CtClassType.subtypeOf(CtClassType.java:303)
at javassist.compiler.MemberResolver.compareSignature(MemberResolver.java:247)
at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:119)
at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:96)
at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:704)
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)
at javassist.compiler.TypeChecker.atArrayInit(TypeChecker.java:185)
at javassist.compiler.ast.ArrayInit.accept(ArrayInit.java:28)
at javassist.compiler.TypeChecker.atNewArrayExpr(TypeChecker.java:161)
at javassist.compiler.TypeChecker.atNewExpr(TypeChecker.java:143)
at javassist.compiler.ast.NewExpr.accept(NewExpr.java:72)
at javassist.compiler.JvstTypeChecker.atMethodArgs(JvstTypeChecker.java:220)
at javassist.compiler.TypeChecker.atMethodCallCore(TypeChecker.java:702)
at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:681)
at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:156)
at javassist.compiler.ast.CallExpr.accept(CallExpr.java:45)
at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:241)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:329)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
at javassist.compiler.CodeGen.atIfStmnt(CodeGen.java:390)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:354)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
at javassist.compiler.CodeGen.atStmnt(CodeGen.java:350)
at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49)
at javassist.compiler.Javac.compileStmnt(Javac.java:568)
at javassist.CtBehavior.insertBefore(CtBehavior.java:705)
at javassist.CtBehavior.insertBefore(CtBehavior.java:685)
at com.xtremelabs.robolectric.bytecode.AndroidTranslator.fixMethod(AndroidTranslator.java:321)
... 25 more
Caused by: java.io.IOException: invalid constant type: 15
at javassist.bytecode.ConstPool.readOne(ConstPool.java:1090)
at javassist.bytecode.ConstPool.read(ConstPool.java:1033)
at javassist.bytecode.ConstPool.<init>(ConstPool.java:149)
at javassist.bytecode.ClassFile.read(ClassFile.java:764)
at javassist.bytecode.ClassFile.<init>(ClassFile.java:108)
at javassist.CtClassType.getClassFile2(CtClassType.java:190)
... 57 more
대학교 안가 현재 작동하고 비슷한 설정을 가지고 있지만 그는 ADT 22.3 실행을 제외하고 우리는 어떤 표시하는 차이를 찾을 수 없습니다. 어떤 도움을 주셔서 감사합니다, 대단히 감사합니다!
편집 : 여러분 중 일부는 테스트 클래스를보고 싶을 것이라고 생각했습니다. 당신은
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import com.xtremelabs.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class BogusTest
{
@Before
public void setUp() throws Exception
{
}
@Test
public void theTest()
{
assertTrue(true);
}
}
Robolectric과 같은 오래된 버전을 사용하는 이유는 무엇입니까? –
정말로 좋은 질문입니다. ADT22.3을 사용하면 제 동료의 설정에서 Robolectric의 최신 버전이 작동하지 않습니다. 우리는 ADT 23이있는 Robolectric의 다양한 버전 (최신 버전 포함)을 시도했지만 그 중 아무 것도 작동하지 않는 것 같습니다. –