2014-11-05 18 views
8

Tôi có một dự án Android sử dụng Mockito, Hamcrest và Espresso để giúp kiểm tra.Cấu hình gradle để sử dụng JUnit, Mockito, Hamcrest và Espresso

Không có vấn đề gì tôi thử với tệp xây dựng Gradle, tôi nhận được NoSuchMethodError cho org.hamcrest.Matcher.anyOf khi tôi thử chạy thử nghiệm sau khi thực hiện gradle androidTestCompile.

Dưới đây là cấu hình hiện tại của tôi:

dependencies { 
    compile project(':GameCore') 
    androidTestCompile files(
      'libs/espresso-1.1.jar', 
      'libs/testrunner-1.1.jar', 
      'libs/testrunner-runtime-1.1.jar' 
    ) 
    androidTestCompile(
      'junit:junit:4.11', 
      'org.mockito:mockito-core:1.10.0', 
      'com.google.guava:guava:14.0.1', 
      'com.squareup.dagger:dagger:1.1.0', 
      'com.google.dexmaker:dexmaker:1.0', 
      'com.google.dexmaker:dexmaker-mockito:1.0', 
      'org.hamcrest:hamcrest-core:1.3', 
      'org.hamcrest:hamcrest-library:1.3' 
      ) 

Tôi đã thử viết lại các yêu cầu JUnit Mockito và để loại trừ hamcrest như vậy:

androidTestCompile('junit:junit:4.11') { 
    exclude group: 'org.hamcrest' 
} 

Nhưng điều này không thực hiện bất kỳ sự khác biệt.

Dự án GameCore là một dự án Java thuần túy. Nó cũng có các phụ thuộc vào JUnit và Mockito, nhưng khi chúng được chỉ định là testCompile, tôi không nghĩ chúng nên can thiệp.

Kết quả cho gradle dependencies cho mô-đun này cho 'androidTestCompile` là:

+--- junit:junit:4.11                
| \--- org.hamcrest:hamcrest-core:1.3 
+--- org.mockito:mockito-core:1.10.0 
| +--- org.hamcrest:hamcrest-core:1.1 -> 1.3 
| \--- org.objenesis:objenesis:2.1 
+--- com.google.guava:guava:14.0.1 
+--- com.squareup.dagger:dagger:1.1.0 
| \--- javax.inject:javax.inject:1 
+--- com.google.dexmaker:dexmaker:1.0 
+--- com.google.dexmaker:dexmaker-mockito:1.0 
| +--- com.google.dexmaker:dexmaker:1.0 
| \--- org.mockito:mockito-core:1.9.5 -> 1.10.0 (*) 
+--- org.hamcrest:hamcrest-core:1.3 
\--- org.hamcrest:hamcrest-library:1.3 
    \--- org.hamcrest:hamcrest-core:1.3 

Sửa

Có thêm điều tra vấn đề này, tôi thấy rằng cà phê cần hamcrest 1.1, nhưng tôi cũng sử dụng assertThat, trong Hamcrest 1.3. Hamcrest 1.3 không có phương pháp anyOf mà espresso sử dụng. Vì vậy, tôi đoán tôi đang bị mắc kẹt :)

+0

Bạn có thể chạy 'phụ thuộc gradle' trên mô-đun đó và đăng đầu ra cho tác vụ có liên quan không? –

Trả lời

4

tôi nhận ra rằng assertThat là trong hamcrest 1.1, nó chỉ là trong hamcrest-integration thay vì hamcrest-core. Tôi đã thay đổi tập tin build của tôi và đó là tất cả làm việc bây giờ:

androidTestCompile files(
     'libs/espresso-1.1.jar', 
     'libs/testrunner-1.1.jar', 
     'libs/testrunner-runtime-1.1.jar' 
) 
androidTestCompile(
     'org.mockito:mockito-core:1.9.5', 
     'com.google.dexmaker:dexmaker-mockito:1.0', 
     'com.google.dexmaker:dexmaker:1.0', 
     'com.google.guava:guava:14.0.1', 
     'com.squareup.dagger:dagger:1.1.0', 
     'org.hamcrest:hamcrest-core:1.1', 
     'org.hamcrest:hamcrest-integration:1.1', 
     'org.hamcrest:hamcrest-library:1.1' 
) 

tôi đã cố gắng sử dụng espresso-1.1-bundled.jar nhưng điều đó gây ra lỗi dex vì hai bản sao của hamcrest 1.1 đã được kéo vào, vì vậy tôi muốn có để loại trừ nó từ một loạt các phụ thuộc.

+0

Tuyệt vời! Tôi vui vì bạn đã làm việc đó. Cá nhân tôi ưa thích gói cà phê espresso đi kèm của Jake Wharton, nhưng cho riêng mình. Thử nghiệm vui vẻ! –

1

Tôi hiện đang sử dụng tất cả các thư viện đó trong dự án Gradle Android của mình (Tôi thực sự cũng như thử nghiệm và TDD :)).

Đây là phụ thuộc phần của tệp build.gradle tôi:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    //noinspection GradleDependency 
    compile 'com.google.android.gms:play-services:5.0.89' 
    provided 'com.squareup.dagger:dagger-compiler:1.2.1' 
    compile 'com.jakewharton:butterknife:5.1.2' 
    compile 'com.squareup.dagger:dagger:1.2.1' 
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' 
    compile 'com.squareup.okhttp:okhttp:2.0.0' 
    compile 'com.squareup.retrofit:retrofit:1.6.0' 
    compile 'com.google.code.gson:gson:2.3' 
    compile 'com.squareup:otto:1.3.5' 
    compile 'javax.annotation:javax.annotation-api:1.2' 
    compile 'com.google.code.findbugs:jsr305:1.3.9' 
    compile 'com.j256.ormlite:ormlite-android:4.43' 
    compile 'com.j256.ormlite:ormlite-core:4.43' 
    compile 'com.android.support:support-v13:20.0.0' 
    compile 'com.path:android-priority-jobqueue:1.1.2' 
    compile'com.squareup.picasso:picasso:2.3.3' 
    compile 'com.github.johnkil.android-robototextview:robototextview:2.1.0' 
    compile 'se.emilsjolander:stickylistheaders:2.5.0' 
    compile 'com.newrelic.agent.android:android-agent:4.+' 

    compile 'com.github.chrisbanes.actionbarpulltorefresh:library:0.9.9' 

    //mockito dependencies 
    androidTestCompile 'org.mockito:mockito-core:1.9.5' 
    androidTestCompile files('libs/dexmaker-mockito-1.0.jar') 
    androidTestCompile files('libs/dexmaker-1.0.jar') 

    //espresso dependencies 
    androidTestCompile 'com.google.guava:guava:18.0' 
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1' 
    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') { 
     exclude group: 'com.squareup.dagger' 
    } 
    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 
} 

Rất nhiều trong số này có lẽ bạn có thể bỏ qua vì vậy đây là một danh sách với chỉ những người cụ thể để kiểm tra:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':facebook') 
    compile project(':library') 
    //noinspection GradleDependency 

    //mockito dependencies 
    androidTestCompile 'org.mockito:mockito-core:1.9.5' 
    androidTestCompile files('libs/dexmaker-mockito-1.0.jar') 
    androidTestCompile files('libs/dexmaker-1.0.jar') 

    //espresso dependencies 
    androidTestCompile 'com.google.guava:guava:18.0' 
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1' 
    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') 
} 

Và bạn có thể tìm thấy các libs dexmaker tại đây: https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-1.0.jar&can=2&q=

và tại đây:

https://code.google.com/p/dexmaker/downloads/detail?name=dexmaker-mockito-1.0.jar&can=2&q=

+0

Cảm ơn bạn đã đăng tệp xây dựng của mình, nhưng tôi không thấy hamcrest ở đây. Có trong thư mục libs của bạn không? – Pikaling

+0

Hamcrest đi kèm với cà phê espresso vì vậy tôi hy vọng nó được chứa trong lib đó. –

+1

Ah OK.Tôi không sử dụng phiên bản tất cả trong một của espresso vì tôi đang cố gắng tránh những xung đột phụ thuộc, do đó tôi đã bao gồm hamcrest riêng biệt – Pikaling

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