Ho bisogno di fare alcuni lavori di test automatico per un'applicazione Android senza il suo codice sorgente. Ho trovato sia robotium che espresso possono fare questo lavoro, ho deciso di usare l'espresso perché il suo supporto di Google.'android.support.test.espresso non esiste' quando voglio usarlo per il test apk individuale
Mi piacerebbe firmare l'apk di destinazione e l'apk di prova espresso con la stessa firma, l'apk di destinazione è lo stesso di this sample.
Quando inizio a codificare l'apk prova di caffè espresso, ho fatto i seguenti lavori.
Il build.gradle nel modulo: 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'
}
Il codice sorgente del mio 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());
}
}
Quando ho provato a eseguire questo programma, Android in studio mi ha detto che Error:(6, 44) error: package android.support.test.espresso does not exist
.
Tutto ciò che hai postato sembra OK. Il tuo I01Test.java è sotto src/androidTest/o src/main? Dovrebbe essere il primo. – vaughandroid
@Baqueta Ho appena inserito I01Test.java all'interno di src/androidTest /, ed eseguo il TestModule, ma c'è un errore 'Causato da: java.lang.ClassNotFoundException: Non ho trovato la classe" tk.tubabe.instrustmen101.Instruments101 " '. L'apk di test e l'apk di destinazione sono due apk diversi con la stessa firma. – liweijian
"tk.tubabe.instrustmen101.Instruments101" essere "tk.tubabe.instrustmen ** t ** 101.Instruments101"? Puoi semplicemente fare riferimento alla classe come normale, non è necessario usare la riflessione per trovarla. – vaughandroid