Ich muss einige automatische Testaufträge zu einer Android-Anwendung ohne seinen Quellcode durchführen. Ich fand, dass sowohl Roboter als auch Espresso diese Arbeit machen können, ich entschied mich dafür, Espresso zu benutzen, weil sein Google-Support.'android.support.test.espresso existiert nicht', wenn ich es zum einzelnen apk Test verwenden möchte
Ich möchte sowohl die Ziel-Apk-und Espresso-Test apk mit der gleichen Signatur, die Ziel-Apk ist das gleiche wie this sample unterzeichnen.
Als ich die Codierung der Espresso-Test apk starten, habe ich die folgenden Jobs.
Das build.gradle in Modul: App:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "tk.deedog.i01test"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
}
Der Quellcode meiner I01Test.java:
package tk.deedog.i01test;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
public class I01Test extends ActivityInstrumentationTestCase2 {
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "tk.tubabe.instrustmen101.Instruments101";
private static Class<?> launcherActivityClass;
Activity i101Acitvity;
static {
try {
launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public I01Test() {
super(launcherActivityClass);
}
@Override
protected void setUp() throws Exception {
super.setUp();
i101Acitvity = getActivity();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testButtonClick() {
onView(withText("Send")).perform(click());
}
}
Wenn ich dieses Programm zu starten versucht, mich Android Studio, dass Error:(6, 44) error: package android.support.test.espresso does not exist
gesagt .
Alles, was Sie geschrieben haben, sieht gut aus. Ist dein I01Test.java unter src/androidTest/oder src/main? Es sollte erster sein. – vaughandroid
@Baqueta Ich habe nur die I01Test.java in die src/androidTest /, und führen Sie das TestModule, aber es gibt einen Fehler 'verursacht durch: java.lang.ClassNotFoundException: Nicht gefunden Klasse" tk.tubabe.instrustmen101.Instruments101 " '. Die Test-APK und die Ziel-APK sind zwei verschiedene APKs mit der gleichen Signatur. – liweijian
Sollte "tk.tubabe.instrustmen101.Instruments101" "tk.tubabe.instrustmen ** t ** 101.Instruments101" sein? Sie können die Klasse einfach wie normal referenzieren, Sie müssen keine Reflexion verwenden, um sie zu finden. – vaughandroid