113

Rõ ràng tôi cần thống kê nhập khẩu chính xác để giải quyết vấn đề này. Theo các tài liệu choAndroidJUnit4 , điều này nên

import android.support.test.runner.AndroidJUnit4;

Khi tôi làm điều đó, Android Studio nổi bật runnermàu đỏ và phàn nàn "Không thể giải quyết biểu tượng 'người chạy'".

Lý lịch

Tôi đã đến điểm này bằng cách làm theo các hướng dẫn trên trang web Nhà phát triển Android để thiết lập các thử nghiệm bằng UI Automator . Vấn đề đầu tiên tôi gặp phải là điều đó com.android.support:support-v4:22.2.0com.android.support.test:runner:0.2phụ thuộc vào các phiên bản khác nhau của com.android.support:support-annotations. Tôi đã làm theo các đề xuất từ báo cáo lỗi Android này và thêm các mục sau allprojectsvào dự án của tôi build.gradle:

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}

Điều này đã giải quyết lỗi ngay lập tức, nhưng tôi nghi ngờ nó dẫn đến các vấn đề hiện tại của tôi. Có ai có bất cứ đề nghị về cách khắc phục điều này?

Các phần có liên quan từ `./gradlew: app: phụ thuộc

androidTestCompile - Classpath for compiling the androidTest sources.
+--- com.jayway.android.robotium:robotium-solo:5.2.1
+--- com.squareup:fest-android:1.0.8
|    \--- org.easytesting:fest-assert-core:2.0M10
|         \--- org.easytesting:fest-util:1.2.5
+--- com.android.support.test:runner:0.2
|    +--- junit:junit-dep:4.10
|    |    \--- org.hamcrest:hamcrest-core:1.1
|    +--- com.android.support.test:exposed-instrumentation-api-publish:0.2
|    \--- com.android.support:support-annotations:22.0.0 -> 22.2.0
+--- com.android.support.test:rules:0.2
|    \--- com.android.support.test:runner:0.2 (*)
\--- com.android.support.test.uiautomator:uiautomator-v18:2.1.0

compile - Classpath for compiling the main sources.
+--- com.android.support:appcompat-v7:22.2.0
|    \--- com.android.support:support-v4:22.2.0
|         \--- com.android.support:support-annotations:22.2.0
+--- com.android.support:support-v4:22.2.0 (*)
+--- com.google.android.gms:play-services:6.1.71
|    \--- com.android.support:support-v4:20.0.0 -> 22.2.0 (*)
+--- com.crashlytics.android:crashlytics:1.+ -> 1.1.13
\--- com.jakewharton:butterknife:5.1.2
|
  • Điều đó cho thấy rằng bản dựng của bạn bị mất com.android.support.test:runnerhoàn toàn. Bạn có thể xác nhận thông qua gradle dependenciesrằng bạn vẫn đang thực hiện việc này sau khi resolutionStrategythay đổi không?

    – Trịnh Tâm Như 18:16:36 02/06/2015
  • @CommonsWare Đã thêm đầu ra phụ thuộc vào câu hỏi của tôi. Tôi không biết những gì (*)có nghĩa là sau com.android.support.test:runner:0.2.

    – Đặng Ðức Trung 18:23:14 02/06/2015
  • According to the Gradle folks, the asterisk "means that the tree view of the dependency graph is cut short at this point because that part of the graph was already listed earlier." I'm stumped as to why this isn't working for you.

    – Tạ Duy Đạt 18:26:56 02/06/2015
  • 1

    Note that @stemadsen 's answer from 2018 is potentially more relevant than the others. Someone once wrote about a test that kept the questions the same year after year, but the answers changed...

    – Hoàng Mỹ Duyên 07:17:01 11/06/2018
29

Update

The Android Test Library is now part of AndroidX. Be sure to use the correct Gradle dependencies found in the official documentation.

Original Answer

I found here that there are newer versions of the Testing Support Library than what I was using:

dependencies {
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
}

Note: Be sure to use the most recent versions of these libraries. This question is from a time when the Android Test Support Library was new and the version numbers here are very out of date.

|
169

Make sure your app in debug build variant. Go to Build > Select Build Variant... and the following should show up:

|
101

I made the mistake to put the test classes at src/test. After moving them to src/androidTest/java/ the dependency was resolved.

|
  • 1

    In my case my test folder was src/test for some reason, then I had to rename it to src/androidTest and it solved my problem, after 3 hours...

    – Dương Hà Nhi 10:58:54 10/08/2016
61

Ok so here is your mistake and mine!

If we are going to write a pice of code for Local Unit Testing we shouldn't use @RunWith(AndroidJUnit4.class) cause we do not use AndroidJUnit4 but we need Junit4. so we should write @RunWith(JUnit4.class). And of course your java test file is under app/src/test/java/your.package.name directory.

Else if (!!) we want to write some Android Instrumented Unit Test we should put our test java files in app/src/androidTest/java/your.package.name directory and use annotation like @RunWith(AndroidJUnit4.class)

|
22

I solved the problem by making a small change in the app's build.gradle file. In the dependencies { ... } section, make sure to include the following line:

debugImplementation 'com.android.support.test:runner:1.0.1'

hoặc bất kỳ phiên bản nào là phiên bản mới nhất tại thời điểm đó ( ...Compilekhông được chấp nhận và đã được thay thế bởi ...Implementation). Lưu ý việc sử dụng debugImplementation. Android Studio đã đề xuất tự động - bao gồm nó với androidTestImplementation, không hoạt động.

Tôi đã tìm ra cách thay đổi nó từ thử nghiệm sang gỡ lỗi bằng cách tìm trong Cấu trúc dự án trong phần Phụ thuộc của mô-đun ứng dụng, nơi bạn có thể thay đổi phạm vi của từng phụ thuộc, xem bên dưới.

|
7

Trong trường hợp của tôi, điều này đã giúp phát hành biến thể:

android {
    ...
    testBuildType "release" 
}
|
  • 1

    Bạn có thể đưa ra một giải pháp đầy đủ hơn. Tôi không hiểu bối cảnh của những gì bạn đã làm.

    – Hoàng Hoàng Nam 17:03:43 17/02/2018
  • 1

    Tôi gặp phải vấn đề "Không thể giải quyết biểu tượng 'AndroidJUnit4'" trong bài kiểm tra espresso của mình khi tôi thay đổi biến thể xây dựng thành "phát hành". Ngay sau khi tôi thêm tuyên bố này (testBuildType "phát hành") vào build.gradle cấp độ ứng dụng (lấy từ developer.android.com/studio/test/index.html#add_a_new_test ) thì vấn đề này đã biến mất.

    – Ngô Ánh Hồng 20:12:05 17/02/2018
  • 1

    Tôi định dạng câu trả lời của bạn mã trong câu trả lời của bạn. Bạn nên thêm chi tiết, chẳng hạn như liên kết từ nhận xét của bạn và mô tả nơi khối này đi trong dự án của bạn.

    – Vũ Bảo Hà 20:46:00 17/02/2018
4

Nếu bất cứ ai vẫn gặp phải vấn đề này:

Không thể giải quyết biểu tượng 'AndroidJUnit4'

và sử dụng API 27, trong build.gradleđó có trong mô-đun ứng dụng, thêm các dòng sau:

testImplementation 'junit:junit:4.12'

// AndroidJUnitRunner and JUnit Rules
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'

// Espresso dependencies
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
3

đặt mã này vào phụ thuộc của bạn

compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
|
  • 1

    Khi tôi viết câu hỏi này, tôi chưa thêm espresso như một sự phụ thuộc cho các bài kiểm tra đơn vị.

    – Tạ Phương Trang 13:08:41 04/01/2017
  • 1

    +1 Tôi thực sự đã tìm ra nó ngay trước khi tôi thấy điều này, nhưng vâng, đây là những gì tôi đã làm và nó đã giải quyết vấn đề của tôi.

    – Hoàng Khánh Tâm 22:11:39 13/01/2017
  • 1

    Thực hiện theo hai câu trả lời dưới đây từ @sepehr. Lớp AndroidJunit4 không có trong gói espresso có mặt trong gói android.support.test.runner. và tất cả những gì bạn phải làm là bao gồm @Runwith (AndroidJunit4. class) được viết ở trên / cho trường hợp thử nghiệm có trong src / Androidtest / java, INSTED OF bao gồm trong các trường hợp thử nghiệm được viết dưới src / test / java.

    – Lý Bích Sương 19:03:05 21/07/2017
1

Nếu bạn đang sử dụng dự án với nhiều kiểu xây dựng thì loại xây dựng được chọn trong cửa sổ biến thể xây dựng phải được đề cập với thẻ testBuildType trong tệp build.gradle của mô-đun.

Ví dụ: Nếu bạn đang sử dụng gỡ lỗi kiểu xây dựng thì bạn nên thêm android{testBuildType "debug" }, nếu sử dụng giai đoạn thì thêm android{testBuildType "stage"}câu lệnh trong thẻ android.

|
0

Như danh sách các câu trả lời chứng minh, điều này có thể được gây ra bởi một vài điều. Một cái nữa cho danh sách:

Tôi đã chạy một LINT quá nhiệt tình loại bỏ tất cả hàng nhập khẩu không sử dụng. Điều này sẽ tạo ra các lỗi tương tự, và rất dễ bỏ lỡ rằng đây là vấn đề.

Android-studio sẽ làm nổi bật các tham chiếu bị thiếu trong mã kiểm tra - và cửa sổ bật lên ALT-ENTER sẽ xuất hiện (đây là bit rất dễ bỏ lỡ).

Tiếp theo, tôi cần xóa các kiểm tra khỏi LINT - hoặc ít nhất là vô hiệu hóa cảnh báo này.

Chỉnh sửa: @ Code-Apprentice, các dòng bị thiếu là:

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;


import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

Vì vậy, lỗi đầu tiên trong tệp là @RunWith(AndroidJUnit4.class)ở đầu lớp kiểm tra của tôi.

|
0

Thêm

compile com.android.support.test:runner:0.5'

giải quyết vấn đề chính xác này cho tôi.

|
  • 1

    Điều này đã được nêu trong câu trả lời được chấp nhận. Bạn cũng nên xem nếu có một phiên bản mới hơn và sử dụng thay thế.

    – Tạ Mai Hiền 16:40:56 31/03/2018
  • 1

    AndroidTestCompile có giống như biên dịch không?

    – Trịnh Thu Đoan 20:04:10 01/04/2018
  • 1

    compilechỉ thị phụ thuộc tên được sử dụng trong ứng dụng chính trong khi androidTestComiplephụ thuộc tên được sử dụng để thử nghiệm. Vì vậy, câu trả lời chính xác là sử dụng androidTestCompile, không compile.

    – Trịnh Ðình Nguyên 20:09:00 01/04/2018

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.