Android:跨模块共享测试代码

时间:2019-11-04 22:14:14

标签: android gradle kotlin android-espresso kotlin-coroutines

我在跨模块测试应用程序共享代码时遇到问题。 我在TestCoroutineContextProvider片段中放置了几个类(CoroutinesTestRulepresentation)。 为了在单元测试和UI测试之间共享代码,我在presentation build.gradle中具有以下内容:

sourceSets {
        test {
            java.srcDirs += "$projectDir/src/testShared"
        }

        androidTest {
            java.srcDirs += "$projectDir/src/testShared"
        }
    }

这样,我认为我可以在ViewModel和Fragment测试中访问这两个文件。 但是,尽管文件已正确导入并且没有IDE错误,但是在尝试运行测试时,我得到以下信息:

e: /features/account/src/test/java/me/myapp/account/AccountViewModelTest.kt: (35, 30): Unresolved reference: CoroutinesTestRule

,其他文件也一样。

我做错什么了吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要执行以下操作才能在单元测试和仪器测试之间共享代码:

  1. 在您的应用级build.gradle文件中,添加以下内容:
sourceSets {

        // Share test utils between unit and instrumented tests
        test.java.srcDirs += 'src/sharedTest/kotlin'
        androidTest.java.srcDirs += 'src/sharedTest/kotlin'
    }

其中sharedTest是共享实用程序将进入的目录/模块名称

  1. 转到build.gradle所在的模块,然后导航至src并创建一个名为sharedTest的目录,并在其中创建kotlin
  2. 通过右键单击->标记为-> Test Sources Root,将kotlin目录标记为“ Test Sources Root”,以便IDE将其显示为测试目录
  3. 在其中放置测试工具
  4. 进行gradle同步
  5. 享受!

注意:即使在这之后有时,当您尝试使用这些共享实用程序时,IDE也会显示错误/警告,但是如果您运行这些测试,则通过gradle执行时它们也会通过。通常,在执行gradle同步或重新启动Android Studio之后,我已经看到此问题消失了