2015-01-15 16 views
9

Tôi cần thực hiện một số công việc kiểm tra tự động cho ứng dụng Android mà không cần mã nguồn của nó. Tôi thấy cả robot và espresso đều có thể thực hiện công việc này, tôi đã quyết định sử dụng espresso vì sự hỗ trợ của Google.'android.support.test.espresso không tồn tại' khi tôi muốn sử dụng nó cho thử nghiệm apk riêng lẻ

Tôi muốn ký cả apk mục tiêu và gói thử nghiệm espresso với cùng chữ ký, gói ứng dụng đích giống như this sample.

enter image description here

Khi tôi bắt đầu để mã hóa các gói ứng dụng thử nghiệm espresso, tôi đã làm những công việc sau đây.

Các build.gradle trong Module: ứng dụng:

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' 
} 

Mã nguồn của I01Test.java tôi:

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()); 
    } 
} 

Khi tôi cố gắng chạy chương trình này, Android studio nói với tôi rằng Error:(6, 44) error: package android.support.test.espresso does not exist .

+1

Mọi thứ bạn đã đăng có vẻ OK. Là I01Test.java của bạn dưới src/androidTest/hoặc src/main? Nó phải là cái cũ. – vaughandroid

+0

@Baqueta Tôi chỉ cần đặt I01Test.java bên trong src/androidTest /, và chạy TestModule, nhưng có một lỗi 'Gây ra bởi: java.lang.ClassNotFoundException: Không tìm thấy lớp" tk.tubabe.instrustmen101.Instruments101 " '. Gói thử nghiệm và apk mục tiêu là hai apk khác nhau có cùng chữ ký. – liweijian

+0

Nên "tk.tubabe.instrustmen101.Instruments101" là "tk.tubabe.instrustmen ** t ** 101.Instruments101"? Bạn chỉ có thể tham khảo lớp như bình thường, bạn không cần phải sử dụng sự phản chiếu để tìm nó. – vaughandroid

Trả lời

5

Tôi đã gặp vấn đề tương tự và làm cho nó hoạt động bằng cách kiểm tra cấu trúc dự án của tôi. Các bài kiểm tra của bạn có phải là src/androidTest không? Tôi phải cấu trúc lại tên của thư mục của tôi từ thử nghiệm để androidTest

0

tôi không hiểu rõ những gì bạn ấy có ý dưới

... ứng dụng Android mà không cần mã nguồn của nó.

nhưng tại sao bạn không thể gọi hoạt động từ lớp thử nghiệm mà không phản ánh? Chỉ cách nó được hiển thị trong Hướng dẫn Bắt đầu Espresso.

Bạn có activity và thích hợp test, hãy xem gói, các lớp được nhập, lớp mở rộng và hàm tạo trong các ví dụ đó. Tôi có nghĩa là SMTH như thế này:

package com.google.android.apps.common.testing.ui.espresso.tests; 

import static com.google.android.apps.common.testing.ui.espresso.Espresso.onData; 
<...> 

import com.google.android.apps.common.testing.ui.testapp.R; 
import com.google.android.apps.common.testing.ui.testapp.SimpleActivity; 

import android.test.ActivityInstrumentationTestCase2; 
import android.test.suitebuilder.annotation.LargeTest; 

@LargeTest 
public class BasicTest extends ActivityInstrumentationTestCase2<SimpleActivity> { 

    public BasicTest() { 
    super(SimpleActivity.class); 
    } 

    @Override 
    public void setUp() throws Exception { 
    super.setUp(); 
    getActivity(); 
    } 

    <...> 
0

tôi đã cùng một vấn đề này, một điều mà đã làm hỏng bài kiểm tra xây dựng của tôi là dòng sau:

main { java.srcDirs = ['src/main/java', 'src/AndroidTests', 'src/AndroidTest/java'] } 

mã kiểm tra Remove từ srcDirs:

sourceSets { 
    .... 
    main { java.srcDirs = ['src/main/java'] } 
} 
0

Quá trễ nhưng có thể giúp ai đó.

Kịch bản của tôi là thế này -

Tôi đang chạy Android Studio 2.2 (Ổn định). Thư mục androidTest của tôi nằm trong src /. Trong chế độ xem "Android", thư mục java của tôi hiển thị thư mục java bình thường, thư mục kiểm tra, thư mục androidTest và một bản sao của thư mục androidTest dưới tên "java" (màu xanh lục). Thủ phạm là

sourceSets { 
.... 
main { java.srcDirs = ['src/main/java','src/androidTest'] } 
... 
} 

Thay đổi này như sau -

sourceSets { 
.... 
main { java.srcDirs = ['src/main/java'] } 
... 
} 

mức Ứng dụng của tôi xây dựng.gradle trông như thế này

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 24 
buildToolsVersion "24.0.2" 

defaultConfig { 
    applicationId "my.package.name" 
    minSdkVersion 16 
    targetSdkVersion 24 
    versionCode 1 
    versionName "1.0-debug" 
    multiDexEnabled true 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

} 

packagingOptions { 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/NOTICE' 

} 
buildTypes { 
    release { 
     shrinkResources true 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
dexOptions { 
    preDexLibraries = false; 
} 
sourceSets { main { java.srcDirs = ['src/main/java'] } } 
} 

dependencies { 
compile fileTree(include: ['*.jar'], dir: 'libs') 
compile 'com.android.support:appcompat-v7:24.2.0' 
compile 'com.android.support:design:24.2.0' 
compile 'com.android.support:support-v13:24.2.0' 
androidTestCompile 'junit:junit:4.12' 

androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2') { 
    // Necessary if your app targets Marshmallow (since Espresso 
    // hasn't moved to Marshmallow yet) 
    exclude group: 'com.android.support', module: 'support-annotations' 
} 
androidTestCompile('com.android.support.test:runner:0.5') { 
    // Necessary if your app targets Marshmallow (since the test runner 
    // hasn't moved to Marshmallow yet) 
    exclude group: 'com.android.support', module: 'support- annotations' 
} 


} 
apply plugin: 'com.google.gms.google-services' 
Các vấn đề liên quan