Android Studio:在app test中包含库测试类

时间:2017-10-16 11:50:38

标签: android android-studio android-gradle android-espresso

我项目文件夹结构的(相关)部分如下

├───lib
│   └───src
│       ├───androidTest
│       │   └───com.example.lib
│       │       └───utils
│       │       └───...
│       └───main
│           └───com.example.lib
│               └───...
└───mobile
    └───src
        ├───androidTest
        │   └───com.example.app
        │       └───...
        └───main
            └───com.example.app
                └───...

所以我有模块“lib”,提供可重复使用的功能和模块“mobile”,包含实际的应用程序。两个模块都有自己的androidTest(仪器测试),其中测试了活动。 lib测试代码还包含实用程序类,例如lib/src/androidTest/com.example.app/utils/TestUtils.java

package com.example.lib;

/**
 * Utility functions for tests
 */
public class TestUtils {

    public static Matcher<View> nthChildOf(final Matcher<View> parentMatcher, final int childPosition) {
        return new TypeSafeMatcher<View>() {
            @Override
            public void describeTo(Description description) {
                description.appendText("with " + childPosition + " child view of type parentMatcher");
            }

            @Override
            public boolean matchesSafely(View view) {
                if (!(view.getParent() instanceof ViewGroup)) {
                    return parentMatcher.matches(view.getParent());
                }

                ViewGroup group = (ViewGroup) view.getParent();
                View child = group.getChildAt(childPosition);
                return parentMatcher.matches(view.getParent()) && child != null && child.equals(view);
            }
        };
    }
    ...

使用lib测试模块中的这个TestUtils类,但是当我从移动测试模块调用它们时,编译器会抱怨:

  

错误:(28,19)错误:找不到符号类TestUtils

e.g。在文件mobile/src/androidTest/com.example.app/SettingActivityTest.java中:

package com.example.app;
import de.ioxp.lib.TestUtils; // This line results in the error, but IntelliJ opens the correct file when clicking on it.

@RunWith(AndroidJUnit4.class)
@LargeTest
public class SettingActivityTest {
    ...

所以我的问题是:如何在我的主应用程序的测试套件中使用我的库的测试套件中的类?

我已经为我的mobile / build.gradle添加了一个明确的androidTestCompile库,但这没有任何结果:

dependencies {
    compile project(':lib')
    androidTestCompile project(':lib') // this line makes no difference, maybe I have to address the lib's testing directly. But how?

    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    }
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2';
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}   

1 个答案:

答案 0 :(得分:3)

那是因为你的库中的androidTest部分没有编译成移动目标。有两种方法可以解决这个问题。

您可以将test util类移动到库源(main),也可以将test util移动到外部库,并通过库和移动中的testAndroidCompile添加它。