【问题标题】:Self-contained test library project cannot find the library classes自包含测试库项目找不到库类
【发布时间】:2026-01-21 22:25:01
【问题描述】:

根据this SDK guide,可以通过创建标准应用程序项目、引用库项目然后对应用程序进行单元测试来实现对库项目的单元测试。

但是,当我执行此操作并启动测试应用程序时,我会收到消息

没有找到测试运行程序“JUnit 3”的测试。

我正在使用 Eclipse 和 Android ADT 插件,都是最新版本。

注意:项目编译得很好。测试项目也可以很好地安装到模拟器。但是在控制台中我可以看到它在寻找<library>.apk,这当然不存在,因为我正在将其作为库编译到测试项目中。

有人让这个工作吗?如果是这样,这里的诡计是什么?

更新:在发现并修复了实际上包含测试类 (!) 的问题后,测试运行器现在可以找到所有测试。 但是,所有测试都失败了,但有以下例外:

java.lang.NoClassDefFoundError:

nameOfClassInLibraryProject 是库项目中定义的类。这些类应该被编译到测试项目中,事实上,一切都编译得很好。但是在运行测试项目时,运行时似乎找不到库类。

【问题讨论】:

    标签: android unit-testing junit


    【解决方案1】:

    在 Eclipse 中浪费了很多时间后,我设法让 Android 库项目开始工作。

    根据Working with Library Projects的文章:

    相反,您必须间接编译库,方法是从依赖应用程序的构建路径中引用库,然后构建该应用程序。

    问题是我将其解释为应该将库项目添加到 Java Build Path 中的 Projects 选项卡中。这样做会使测试项目编译,因为库代码显然对编译器可用。但由于库本身并未编译成 .jar 或 .apk,因此库类永远不会部署到设备上。

    解决方案是将库项目添加到Projects,而是在Source选项卡上添加库/src文件夹使用链接源...按钮。是的,必须链接到测试项目的是库 src 文件夹,而不是库项目根目录。

    【讨论】:

    • 我遇到了同样的问题 (NoClassDefFoundError),虽然不是在自包含的测试库项目中,而是在引用 android 库项目的应用程序项目的测试项目中。您的解决方案仍然有效,非常感谢您的解决。
    • 谢谢。只有当我从项目属性中删除项目引用并将库添加为库项目时,它才起作用。
    • 更容易在项目属性中添加库,在 Android 部分作为库,如下所述:*.com/questions/8248196/…
    • +1 for a 解决该问题,但是,我更喜欢@theV0ID 提供的解决方案,因为它更好地反映了库项目的用途...
    • @dbm 我同意。虽然我认为整个 Android/Library/Project 事情都搞砸了,而且 Eclipse 也无济于事。我很久以前就搬到了 IntelliJ,这有了很大的进步。但我仍然认为 .NET 项目和程序集的清洁度遥遥领先。一个组件引用另一个组件,吊杆。完毕。 :)