为什么 Android Studio 编译我的整个应用程序以启动原始单元测试?

Why does Android Studio compile my whole app to launch a primitive unit test?

每当我“从边缘菜单”(见屏幕截图)启动单元测试时,它没有任何 Android 依赖项,Android Studio 只会将我的整个应用程序编译为 运行 一个原始断言。

这是我的应用程序需要完全编译的预期行为吗?我期望单元测试非常快,并且只编译测试中提到的那些 classes 及其依赖的 classes 将被编译用于单元测试。

此外,如果我添加任何 Android class,例如ApplicationAppCompatActivity,测试它仍然会成功完成。每篇关于 Android 测试的文章都说不可能 运行 依赖任何 Android 库的单元测试。

Gradle 项目的结构通常包含一个 main 源集和一个 test 源集。它们是单独编译的,并且 test 配置为依赖于 main。 Gradle 只知道它需要 main 如果它应该 运行 test。因此它在编译 test 之前编译所有 main。如果您查看“构建”面板,您可以在编译 test 时看到它的运行情况。事实上,如果 main 中的任何 class 有语法错误,它甚至不会尝试编译 test,即使 test 不需要 class。