Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 黑盒浓缩咖啡测试没有';在路径上找不到类_Android_Android Studio_Android Espresso_Black Box Testing - Fatal编程技术网

Android 黑盒浓缩咖啡测试没有';在路径上找不到类

Android 黑盒浓缩咖啡测试没有';在路径上找不到类,android,android-studio,android-espresso,black-box-testing,Android,Android Studio,Android Espresso,Black Box Testing,我在用浓缩咖啡做黑盒测试。我从另一个线程()跟随向导。但是我的测试在DexPathList上找不到类。错误消息是: 原因:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/system/framework/android.test.runner.jar],zip文件“/data/app/…test-2.apk”,zip文件“/data/app/…-2.apk”],nativeLibraryDirectories=[/data/app

我在用浓缩咖啡做黑盒测试。我从另一个线程()跟随向导。但是我的测试在DexPathList上找不到类。错误消息是:

原因:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件”/system/framework/android.test.runner.jar],zip文件“/data/app/…test-2.apk”,zip文件“/data/app/…-2.apk”],nativeLibraryDirectories=[/data/app lib/…test-2,/data/app lib/…-2,/system/lib]]

我正在测试的应用程序是Twitter,我没有源代码。所以我在android Studio中创建了一个android项目

清单文件如下所示:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.test">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/AppTheme">

    </application>

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.twitter.android">
    </instrumentation>
</manifest>

测试类:

@RunWith(AndroidJUnit4.class)
public class Replayer {
    private static final String CLASSNAME = "com.twitter.android.DispatchActivity";

    private static Class<? extends Activity> activityClass;
    static {
        try {
            activityClass = (Class<? extends Activity>) Class.forName(CLASSNAME);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

    @Rule
    public final ActivityTestRule<?> activityRule
            = new ActivityTestRule<>(activityClass);

    @Test
    public void launchMain() {
        Espresso.onView(ViewMatchers.withText("Log in")).perform(ViewActions.click());
    }
}
@RunWith(AndroidJUnit4.class)
公共类重放器{
私有静态最终字符串CLASSNAME=“com.twitter.android.DispatchActivity”;
私有静态类activityRule
=新的ActivityTestRule(activityClass);
@试验
public void launchMain(){
Espresso.onView(ViewMatchers.withText(“登录”)).perform(ViewActions.click());
}
}

我在DexPathList上没有看到目标应用程序。我是否误解了我的项目?

嗯,我在探索了将近一个月后才发现。。。需要在build.gradle文件中指定目标应用程序,如下所示:

android {
    ....
    defaultConfig {
        ...
        applicationId "com.twitter.android"
    }
    ...
}

gradle将在android清单文件中自动生成instrumentation节点。请注意,在清单中手动添加android:targetPackage将不起作用。

根据,
testApplicationId
表示“测试应用程序ID”,与被测试应用程序的包名无关。此外,说明:测试应用程序清单中的
instrumentation
节点的
targetPackage
属性值会自动填充测试应用程序的包名,即使它是通过
defaultConfig
和/或构建类型对象自定义的。这就是清单的这一部分自动生成的原因之一。@JeremyKao非常感谢您指出这一点。它实际上是一个输入错误,应该是applicationId而不是testApplicationId。