我将ViewPagerIndicator
添加到我的项目中(这是一个Android库项目),我的测试从IntelliJ运行良好,但是当我从ANT运行它们时失败了。需要说明的是,只有引用此Android库项目中的类的测试失败,其余测试都没有任何问题。我猜我的build.xml中有些东西不正确?还有其他人遇到过这个吗?
这是堆栈跟踪:
java.lang.NoClassDefFoundError: LCOM / viewpagerindicator / CirclePageIndicator; 。com.google.inject.internal.util $ ComputationException: java.lang.NoClassDefFoundError: LCOM / viewpagerindicator / CirclePageIndicator;在 com.google.inject.internal.util。$ $地图制作StrategyImpl.compute(MapMaker.java:553) 在 com.google.inject.internal.util。$ $地图制作StrategyImpl.compute(MapMaker.java:419) 在 com.google.inject.internal.util。$ CustomConcurrentHashMap $ ComputingImpl.get(CustomConcurrentHashMap.java:2041) 在 com.google.inject.internal.FailableCache.get(FailableCache.java:50) 在 com.google.inject.internal.MembersInjectorStore.get(MembersInjectorStore.java:65) 在 com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:950) 在 com.google.inject.internal.InjectorImpl.getMembersInjector(InjectorImpl.java:957) 在 com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:943) 在 roboguice.inject.ContextScopedRoboInjector.injectMembersWithoutViews(ContextScopedRoboInjector.java:243) 在roboguice.activity.RoboActivity.onCreate(RoboActivity.java:78)at at com.mycompany.myproduct.activities.TutorialActivity.onCreate(TutorialActivity.java:36) 在 com.mycompany.myproduct.activities.TutorialActivityTest.setup(TutorialActivityTest.java:37) 在 com.xtremelabs.robolectric.RobolectricTestRunner $ 1.evaluate(RobolectricTestRunner.java:292)
答案 0 :(得分:0)
我想出来了。
在 build.xml 中的junit
目标下的test
任务中(我从Github上的AndroidIntellijStarter项目获取了代码段),您需要添加一个classpath
引用,指向为您项目中包含的每个库项目构建的 classes.jar 文件。
可能有一种更优雅的方式来实现这一点,但这是我在短时间内提出的:
<target name="test" depends="compile.tests" description="test all">
<mkdir dir="${out.dir}/out/reports/tests"/>
<junit showoutput="true" failureproperty="junit.failure">
<formatter type="plain" usefile="false" if="junit.console.out"/>
<formatter type="plain"/>
<formatter type="xml"/>
<batchtest todir="${out.dir}/out/reports/tests">
<fileset dir="${tested.project.test.absolute.dir}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
<classpath>
<!-- Project -->
<pathelement path="${out.classes.absolute.dir}"/>
<pathelement path="${out.test.classes.absolute.dir}"/>
<fileset dir="${extensible.libs.classpath}" includes="**/*.jar"/>
<!-- Library Project Here -->
<fileset dir="path/to/classes/jar" includes="*.jar"/>
<!-- Robolectric -->
<fileset dir="submodules/robolectric/lib/main" includes="*.jar"/>
<pathelement path="submodules/robolectric/bin/mainClasses"/>
<!-- Android -->
<path refid="android.target.classpath"/>
</classpath>
</junit>
<fail if="junit.failure" message="Unit test(s) failed. See reports!"/>
</target>