我项目文件夹结构的(相关)部分如下
├───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'
}
答案 0 :(得分:3)
那是因为你的库中的androidTest部分没有编译成移动目标。有两种方法可以解决这个问题。
您可以将test util类移动到库源(main),也可以将test util移动到外部库,并通过库和移动中的testAndroidCompile添加它。