2013-10-28 18 views
6

Tôi đã bắt đầu sử dụng Android Studio và gradle gần đây để phát triển Android và tìm thấy nó tốt hơn tổng thể hơn eclipse/ant hoặc maven. Tuy nhiên, gần đây tôi đã bắt đầu cố gắng triển khai một số loại thử nghiệm đơn vị và tích hợp với ứng dụng của mình. Tôi đã có thể nhận được các bài kiểm tra cơ bản làm việc bằng cách sử dụng khung công tác Espresso gần đây được phát hành bởi google. Tôi đã có một số xét nghiệm mặc dù nơi tôi cần thiết để thử và tiêm các phiên bản của các đối tượng giả. Tôi đã sử dụng dao găm trong quá khứ cho một dự án khác vì vậy tôi đã đưa dao găm vào dự án của mình. Tuy nhiên bây giờ thử nghiệm của tôi sẽ không chạy vì các lỗi sau:Sử dụng android gradle + dagger để chạy InstrumentTests

gradle connectedCheck 

...

4.1.2 failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' :EspressoApp:connectedCheck

Tôi tạo ra một bản demo đơn giản này ở đây: https://github.com/mwolfe38/android-espresso-dagger

Chỉ cần tạo bản sao và sau đó từ dòng lệnh chạy: gradle connectedCheck

Ở trên, tôi đã thử các phụ thuộc một số cách khác nhau, ban đầu như sau:

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
    compile 'com.squareup.dagger:dagger:1.1.0' 

    instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar', 
      'libs/testrunner-1.0-SNAPSHOT.jar', 
      'libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
    instrumentTestCompile 'org.hamcrest:hamcrest-all:1.3' 
    instrumentTestCompile 'com.google.guava:guava:15.0' 
} 

nhưng điều đó mang lại cho tôi một lỗi liên quan đến khởi tạo tĩnh. Điều này dường như được gây ra bởi một số mã khởi tạo tĩnh trong khung espresso liên quan đến dao găm. Vì vậy, Sau khi thêm phụ thuộc dao găm vào instrumentTestCompile, tôi nhận được IllegalAccessError được đề cập ở trên.

Bất kỳ ai có may mắn kể cả dao găm trong dự án của bạn và thực hiện các bài kiểm tra cà phê espresso?

Trả lời

11

Mất một lúc nhưng cuối cùng tôi cũng đã làm việc. Tôi phải làm như sau:

  1. Khai báo phụ thuộc của tôi như vậy:

    dependencies { 
        compile 'com.android.support:appcompat-v7:+' 
        compile 'com.squareup.dagger:dagger-compiler:1.1.0' 
        compile 'com.squareup.dagger:dagger:1.1.0' 
    
        instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar','libs/testrunner-1.0-SNAPSHOT.jar','libs/testrunner-runtime-1.0-SNAPSHOT.jar') 
        instrumentTestCompile files('libs/hamcrest-core-1.1.jar', 'libs/hamcrest-library-1.1.jar', 'libs/hamcrest-integration-1.1.jar') 
        instrumentTestCompile 'com.google.guava:guava:14.0.1' 
    } 
    
  2. Sao chép lọ hamcrest từ here

  3. Hủy bỏ các tập tin giấy phép từ các lọ như thế này (hoặc nếu không bạn sẽ gặp lỗi về các tệp LICENSE.txt trùng lặp)

    zip -d hamcrest-core-1.1.jar LICENSE.txt 
    zip -d hamcrest-library-1.1.jar LICENSE.txt 
    
  4. Run gradle connectedCheck

Một số điều cần lưu ý:
- hamcrest 1.3 không làm việc cho tôi, có một lỗi về một khớp đã mất tích - Điên bao nhiêu hoops tôi phải nhảy qua để đến đây.
- Chúc may mắn có được điều này để chơi tốt với studio android.

+1

Bạn sẽ nghĩ rằng họ chỉ có thể lấy gói cà phê espresso theo thời gian .aar .... – jophde

+0

vâng hoặc chỉ cần đặt nó vào trung tâm maven để chúng tôi có thể bao gồm nó như mọi phụ thuộc khác. Một nỗi đau! Tôi yêu bộ thử nghiệm bây giờ mà nó hoạt động nhưng nhận được nó để làm việc là một cơn ác mộng! –

+1

Tôi sử dụng Eclipse và điều này không giúp tôi. – Viacheslav

0

Ok, vì vậy tôi đã đối phó với vấn đề này trong nhiều giờ, và ở đây là sửa chữa của tôi: Đặt điều này trong sự phụ thuộc của build.gradle bạn

compile(project(':commons:statemachine')) { 
    exclude module: 'junit' 
    exclude module: 'json' 
    exclude module: 'guava' 
} 

compile 'com.google.guava:guava:15.0' 
instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT-bundled.jar') 
instrumentTestCompile 'com.squareup:fest-android:1.0.+' 

Thêm espresso kèm jar trong thư mục libs của bài kiểm tra của bạn. Bây giờ đến phần quan trọng.

Mở hộp đựng cà phê espresso đó với WinRar hoặc tương đương và chuyển đến thư mục com/folder, sau đó chọn thư mục android và Xóa thư mục đó. Bây giờ đóng WinRar và biên dịch và chạy thử nghiệm của bạn :-)

Các vấn đề liên quan