【问题标题】:shared test classes in multimdule android projectmultimdule android项目中的共享测试类
【发布时间】:2021-05-04 10:28:52
【问题描述】:

我有一个应用程序在干净的架构中开发,具有多个模块。考虑下面的包结构。

app
  src 
   |--> main 
   |--> test
          |--> test classes that access shared test classes from common-test like mainCoroutineRue
data
   src 
    |--> main
    |--> test
          |--> test classes that access shared test classes from common-test like FakeDispatcher

common-test
   src
    |--> main
           |--> MainCorotineRule
           |--> FakeDispatcher
    |--> test

这里是gradle文件代码:

应用程序:

dependencies{
    testImplementation project(':common-test')
}

数据:

plugins{
id 'java-library'
id 'kotlin'
}
dependencies{
testImplemenation project(path:':common-test',configuration:'default')
}

普通测试:

plugins{
id 'com.android.library'
id 'kotlin-android'
}

dependecies{
 implementation "androidx.arch.core:core-testing:1.1.1"
//test classes 
//implementation junit
//impementation coroutine-test
//mockk
}

现在的问题是我能够成功地访问应用程序测试类中的 MainCoroutineRule 等类,但是当我通过编译运行测试时,我无法从 common-test 访问类(即 FakeDispatcher)到数据模块的测试文件夹中它从 common-test 导入正确的类的时间。 它抛出的错误是“未解决的参考” 请告诉我错过了什么?

【问题讨论】:

    标签: android kotlin android-gradle-plugin clean-architecture


    【解决方案1】:

    根据我的经验,我无法成功创建用于测试目的的 aar(android 库),这可能是您的主要问题。 android 库 (aar) 与 java 库 (jar) 之间存在单向兼容性。您可以将罐子包含到 aar 中,但不能反过来。

    如果您的测试不需要 aar(基本上您不需要任何与 android 资源相关的东西),我建议您将测试库更改为 java 插件。如果您需要对 Android 类的引用,您可以随时导入 android 的源代码,类似于 robolectric 所做的 here

    【讨论】:

    • 我已经编辑了我的问题。所以基本上我需要common-test作为android lib,因为我需要一些与android相关的基础测试类和他们的lib,比如“android.arch.core:core-testing:1.1.1”
    • 那么更新一点。你是对的,看看核心测试库它是一个 aar,所以我建议你将测试模块拆分为 common-test 和 android-test 并从 android 使用 common 并包括 android 特定代码并保留 java仅代码可被所有模块分离和重用
    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多