在test和androidTest之间共享测试类

Jen*_*eni 10 android unit-testing

我有Android应用程序项目,在Android Studio中工作.我的应用程序文件在my.package包中我的单元测试在my.package.unittest包中我的espresso测试是在my.package.androidtest包中

在我的一个espresso测试中,我需要使用我在unittest包下的一个类,但我无法做到.

我需要使用的Unittest类位于app/src/test/java文件夹中:

package my.package.unittest;
public class HelperClass {
...
}
Run Code Online (Sandbox Code Playgroud)

我试图使用它的文件是在app/src/androidTest/java文件夹中:

package my.package.androidtest;

import static my.package.unittest.*;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class AppTest {
    HelperClass.staticMethod();
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:无法解析符号HelperClass

附加信息:

import my.package.unittest.HelperClass;
Run Code Online (Sandbox Code Playgroud)

这本身就给出了"无法解析符号"的错误.

HelperClass在我的Espresso测试中使用我的UnitTests 的正确方法是什么.

Lea*_*ira 16

@Jeremy Kao指出了正确的答案.

1 - >在app/src中创建一个目录.你可以称之为testShared.

2 - >将您的类放在此目录中.

3 - >在app/build.gradle里面放:

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

    androidTest {
        java.srcDirs += "$projectDir/src/testShared"
    }
}
Run Code Online (Sandbox Code Playgroud)

把它放在android闭包之外的任何地方.

4 - >玩得开心!

资源:

http://trickyandroid.com/android-test-tricks-sharing-code-between-unit-ui-tests/

  • `java.srcDirs` 和 `main.java.srcDirs` 都为我工作。此外,闭包不需要放在“android”闭包之外。它可以放在里面,但你只需要将`android.sourceSets`更改为`sourceSets` (3认同)
  • 从 AndroidStudio 2021.2.1 开始,这不再有效,因为 IntelliJ 不支持同一文件位于两个不同的根目录中。这似乎是 IntelliJ 的一个老问题,所以也许它只是被重新引入并将在补丁中修复。https://youtrack.jetbrains.com/issue/IDEA-210311#focus=streamItem-27-3407352.0-0 (2认同)