Tại sao người chạy thử nghiệm Android báo cáo "Bộ thử nghiệm trống"?


98

Tôi đang đập đầu vào tường ở đây để cố gắng tìm ra lý do tại sao IntelliJ / Android lại báo cáo "Bộ thử nghiệm trống". Tôi có một dự án nhỏ với hai Mô-đun IntelliJ ("Dự án" trong Eclipse). Mô-đun kiểm tra Đơn vị có AndroidManifest.xml của riêng nó, mà tôi đã dán ở dưới cùng. Tôi đang cố gắng chạy một ActivityUnitTestCase, vì các bài kiểm tra sẽ phụ thuộc vào Context-đối tượng.

Tên gói của mô-đun chính là nilzor.myapp. Tên pacakge của mô-đun thử nghiệm lànilzor.myapp.tests

Tại sao người chạy thử nghiệm không phát hiện testBlah()-method như một thử nghiệm?

<?xml version="1.0" encoding="utf-8"?>
<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="nilzor.myapp.tests"
          android:versionCode="1"
          android:versionName="1.0">
    <!-- We add an application tag here just so that we can indicate that
         this package needs to link against the android.test library,
         which is needed when building test cases. -->
    <application>
        <uses-library android:name="android.test.runner"/>
    </application>
    <!--
    This declares that this application uses the instrumentation test runner targeting
    the package of nilzor.myapp.  To run the tests use the command:
    "adb shell am instrument -w nilzor.myapp.tests/android.test.InstrumentationTestRunner"
    -->
    <instrumentation android:name="android.test.InstrumentationTestRunner"
                     android:targetPackage="nilzor.myapp"
                     android:label="Tests for nilzor.myapp"/>
</manifest>

Và đây là lớp kiểm tra của tôi:;

package nilzor.myapp.tests;

public class NilzorSomeTest<T extends Activity> extends ActivityUnitTestCase<T>{
    public NilzorSomeTest(Class<T> activityClass){
        super(activityClass);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

Tôi đã đọc các nguyên tắc cơ bản về thử nghiệm , tài liệu thử nghiệm hoạt động và đã thử theo dõi blog thử nghiệm Hello world này , mặc dù blog này dành cho Eclipse. Tôi không thể yêu cầu người chạy thử nghiệm tìm và chạy thử nghiệm của tôi. Tôi đang làm gì sai?

Một số câu hỏi mà tôi vẫn cảm thấy không chắc chắn là:

  1. Tôi có cần chú thích phía trên phương pháp Unit test không?
  2. Tôi có cần đặt tiền tố phương thức bằng "test" hay chỉ dành cho các bài kiểm tra JUnit?
  3. Tôi có thể có các bài kiểm tra trong gói phụ của nilzor.myapp.tests?

Nhưng câu hỏi chính của bài viết này là tại sao người chạy thử không phát hiện ra bài thi của tôi ?


Đối với điểm 3, nếu bạn đang sử dụng Android Studio, tôi khuyên bạn nên sử dụng cmd+shift+tphím tắt sẽ tự động tạo lớp thử nghiệm ở đúng vị trí gói phù hợp với lớp bạn hiện đang chỉnh sửa.
David Argyle Thacker

Đề phòng trường hợp không có ai khác được khai thác như tôi. Hãy chắc chắn rằng bạn không quên đặt @Testđiểm đánh dấu trên đầu bài kiểm tra.
Matt D

Câu trả lời:


70

Bạn cần cung cấp hàm tạo mặc định cho lớp thử nghiệm của mình, ví dụ:

package nilzor.myapp.tests;

public class NilzorSomeTest extends ActivityUnitTestCase<ActivityYouWantToTest>{
    public NilzorSomeTest(){
        super(ActivityYouWantToTest.class);
    }

    @SmallTest
    public void testBlah(){
        assertEquals(1,1);
    }
}

về các câu hỏi khác của bạn:

  1. Không. Các bài kiểm tra của tôi vẫn chạy mà không có bất kỳ chú thích nào, nhưng tôi đoán rằng đó là một phương pháp hay để có chúng. Nó cho phép bạn chỉ định kích thước của các bài kiểm tra để chạy. Hãy xem mục đích của chú thích @SmallTest, @MediumTest và @LargeTest trong Android là gì? để biết thêm chi tiết.

  2. Có, bạn cần tiền tố "test". InteliJ đưa ra cảnh báo "phương pháp không bao giờ được sử dụng" khi không có tiền tố "thử nghiệm" và bỏ qua phương pháp đó trong khi chạy thử nghiệm.

  3. Đúng. Tôi đã tổ chức các bài kiểm tra của mình thành các gói con và có vẻ như nó đang hoạt động tốt.


5
Điều này không cần thiết nếu bạn sử dụng ActivityTestRule
Yair Kukielka

Thêm hàm tạo mặc định đã làm công việc cho tôi.
Dragan Marjanović

54

Nếu điều này xảy ra "đột ngột" hoặc "nó đã hoạt động cách đây 5 phút", giải pháp của tôi là đi vào cấu hình Chạy / Gỡ lỗi và xóa mọi cấu hình trong "Kiểm tra Android". Đôi khi các cấu hình này bị hỏng nếu tôi cấu trúc lại lớp đang thử nghiệm (ví dụ: bằng cách chuyển sang một gói mới).

nhập mô tả hình ảnh ở đây


Điều này đã làm việc cho tôi. Tôi gặp lỗi bộ thử nghiệm trống. Có thể là do tôi đã thêm PowerMockito sau khi cấu hình được tạo ban đầu.
Ajith Memana 21/09/16

Tôi thường gặp sự cố này và các sự cố khác khi chạy thử nghiệm trong đó cấu hình bản dựng hoạt động bình thường trước đó. Tôi đã có thể sửa chúng bằng cách thực hiện phương pháp này.
stevehs17

3
Sau khi xóa các configs, tôi kích chuột phải vào một thử nghiệm gói trong dự án thám hiểm (xem Android) và chọn Create 'Tests in XXX...- sau đó nó làm việc một lần nữa
TmTron

9

Không có điều nào ở trên sửa nó cho tôi. Điều gì đã giúp làm theo hướng dẫn :

Tạo cấu hình thử nghiệm

Trong Android Studio:

  • Mở menu Run -> Chỉnh sửa cấu hình
  • Thêm cấu hình Android Tests mới
  • Chọn một mô-đun
  • Thêm một người chạy thiết bị cụ thể:

  android.support.test.runner.AndroidJUnitRunner

Chạy cấu hình mới tạo.


6

Tôi đã có một vấn đề tương tự. Không chắc tại sao điều này lại xảy ra nhưng tôi đã có thể khắc phục bằng cách đi tới: "Tệp"> "Vô hiệu hóa bộ nhớ cache / Khởi động lại" trong Android Studio.


Điều này đã khắc phục sự cố cho tôi khi tôi gặp lỗi tương tự như OP sau khi cấu trúc lại tên của lớp thử nghiệm của tôi.
Marco

4

Tôi không biết nó có hữu ích cho Android Studio không nhưng tôi đã gặp một số loại xung đột Intellij-Gradle. Giải quyết nó bằng cách "nhấp chuột phải" vào tệp thử nghiệm và nhấn "biên dịch tệp ... Test.java". Sau đó, tôi có thể chạy lại các bài kiểm tra đơn lẻ.


2
"Tập tin biên dịch" này ở đâu trên * Test.java? Phiên bản Android Studio nào?
Mark Lapasa

Như tôi đã cố gắng nói ở trên, tôi không sử dụng Android Studio. Tôi đang sử dụng Intellij 15 proffesional. hình ảnh của nhấp chuột phải-thả xuống <- Tôi đã dán một hình ảnh ở đây.
kotlinski

4

Tôi đã gặp vấn đề tương tự trên Android Studio 2.3.1, hóa ra đó chỉ là một lỗi với AS. Chạy thử nghiệm tương tự trên phiên bản 2.2.1 hoạt động tốt.

Nếu bạn chỉ đang chạy Android Studio trên kênh Cannary, tôi cũng khuyên bạn nên cài đặt phiên bản ổn định. http://tools.android.com/tips/using-multiple-android-studio-versions


Tương tự đối với tôi, 3.1.2 ổn định hoạt động, 3.2 canary 15 thì không.
arekolek

3

Tôi đã có các bài kiểm tra hoạt động tốt cho đến khi gradlestudio android được nâng cấp.

Ngoài việc thêm một phương thức khởi tạo mặc định vào các bài kiểm tra của bạn, bạn có thể cần thực hiện một số điều sau để bộ kiểm tra của bạn hoạt động

Đang src/tạo androidTest/java/<your-package-name>/test. Lưu ý androidTest. Bất cứ điều gì khác bao gồm instrumentTestsẽ không hoạt động.

Thêm cái này vào build.gradle

sourceSets {
    testLocal {
        java.srcDir file('src/androidTest/java')
        resources.srcDir file('src/androidTest/resources')
    }
}



android{
    sourceSets {
       instrumentTest.setRoot('src/androidTest/')
    }
}

dependencies{
     testLocalCompile 'junit:junit:4.11'
}

task localTest(type: Test, dependsOn: assemble) {
    testClassesDir = sourceSets.testLocal.output.classesDir

    android.sourceSets.main.java.srcDirs.each { dir ->
        def buildDir = dir.getAbsolutePath().split('/')
        buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')

        sourceSets.testLocal.compileClasspath += files(buildDir)
        sourceSets.testLocal.runtimeClasspath += files(buildDir)
    }

    classpath = sourceSets.testLocal.runtimeClasspath
}

check.dependsOn localTest

Thêm cái này vào AndroidManifest.xml

 <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:label="Tests for my packaged app"
        android:targetPackage="<my-package-name>.test" />

3

Đối với Intellij 15, tôi đã giải quyết vấn đề này bằng cách:

  1. Mở cài đặt 'Cấu trúc dự án'
  2. Nhấp vào 'Mô-đun' (ở bên trái)
  3. Tab 'Nguồn'
    a. Nhấp chuột phải vào thư mục nguồn của bạn (thường là src) nhấp vào 'Nguồn'.
    b. Nhấp chuột phải vào thư mục kiểm tra của bạn, nhấp vào 'Kiểm tra'
    c. Nhấp chuột phải vào thư mục ngoài của bạn, nhấp vào 'Bị loại trừ'
  4. Chuyển đến tab 'Đường dẫn'
    a. Nhấp vào nút radio 'Sử dụng đường dẫn đầu ra biên dịch mô-đun'
    b. Chọn thư mục đường dẫn đầu ra của bạn cho 'Đường dẫn đầu ra'
    c. Chọn thư mục đường dẫn thử nghiệm của bạn cho 'Đường dẫn đầu ra thử nghiệm'
  5. Bấm Ok

3

Rõ ràng, bạn cần một thiết bị đích để chạy các bài kiểm tra của mình vì chúng là các bài kiểm tra công cụ. Vì một số lý do, Android studio đôi khi không yêu cầu bạn trỏ đến thiết bị mục tiêu này và chỉ nhắc thông báo "Bộ thử nghiệm trống". Có nhiều cách khác nhau để khắc phục điều này, sau đây là một số cách:

  • chạy ứng dụng chính của bạn và chọn một thiết bị mục tiêu hoặc

  • chuyển đến cấu hình Chạy (Chạy / Chạy ... / Chỉnh sửa Cấu hình) và sửa đổi Tùy chọn Mục tiêu Triển khai


Chỉ để giúp ai đó nếu họ thử giải pháp của bạn. Trong trường hợp của tôi, trước tiên tôi phải chạy ứng dụng thực tế trên thiết bị / trình mô phỏng và sau đó AndroidTest của tôi có thể thấy thiết bị để chạy thử nghiệm. Sau đó mọi thứ đã hoạt động. Cộng một cho câu trả lời.
A_P

2

Trong trường hợp của tôi, không có câu trả lời nào trước đó hoạt động. Giải pháp là chỉ cần di chuyển lớp thử nghiệm sang một gói khác .

Điều này xảy ra dưới androidTest/


2

Trong trường hợp của tôi, vấn đề đó là do lỗi trong mã của tôi, thực ra là trong lớp ứng dụng, vì vậy hoạt động đích không được mở và kiểm tra bản in đầu ra

Lỗi bộ thử nghiệm trống

Tôi đã thử chạy thử nghiệm trực tiếp từ thiết bị đầu cuối với adb shell am instrument -w -r -e package your.package -e debug false android.support.test.runner.AndroidJUnitRunner. Với điều này, nó in cho bạn nhiều hơn nữa về ngoại lệ.


2

Tôi gặp sự cố này vì tôi đã có cái này trong bản build.gradle:

testOptions {
    execution "ANDROID_TEST_ORCHESTRATOR"
}

Mặc dù tôi không sử dụng Android Test Orchestrator (chắc hẳn đã sao chép nhầm từ các hướng dẫn).

Nhận xét mà ra giải quyết nó cho tôi.


1

Không có giải pháp nào khác phù hợp với tôi, nhưng tôi có thể làm cho điều này hoạt động đơn giản bằng cách gỡ cài đặt ứng dụng hoặc bộ thử nghiệm hiện có, sau đó chạy thử nghiệm.


Điều đó đã giúp tôi. Tôi đã thực hiện các thay đổi trên cấp độ cơ sở dữ liệu trước khi chạy thử nghiệm, vì vậy lớp trong bài kiểm tra công cụ không thể hoạt động. Thật kỳ lạ khi Android Studio hiển thị một thông báo không liên quan như vậy.
PetroCliff

1

Trong trường hợp của tôi, dự án tôi đang làm có một vài mô-đun. Không có giải pháp nào mà tôi tìm thấy cho lỗi này giúp ích cho tôi, và sau đó bằng cách nào đó tôi nhận ra rằng nếu tôi thêm các phụ thuộc thử nghiệm vào CẢ HAI tệp build.gradle, các bài kiểm tra bắt đầu hoạt động một cách kỳ diệu. Không quan trọng nếu các bài kiểm tra của bạn chỉ nằm trong 1 trong các mô-đun, cả hai tệp gradle phải bao gồm các phần phụ thuộc và giá trị testInticmentationRunner.

Vì vậy, nếu giống như tôi, không có câu trả lời nào khác giúp được bạn, hãy thử thêm những dòng này vào tệp build.gradle của mỗi mô-đun của bạn:

android {    
    ....
    defaultConfig {
        ...
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }  
}

và sau đó cũng thêm:

dependencies {
    ...
    // Test
    androidTestCompile 'com.android.support:support-annotations:23.4.0'
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.android.support.test:rules:0.5'

}

1

Tôi vừa đổi tên tệp và sự cố đã được khắc phục.


1

Tôi đã gặp vấn đề tương tự, và lý do là lớp kiểm tra của tôi không có Kiểm tra ở cuối tên lớp!


1

Sự cố của tôi là do một ngoại lệ được đưa vào @BeforeClassphương thức của trường hợp thử nghiệm của tôi. Đó là một số cách không làm cho kiểm tra không thành công - tôi chỉ tìm thấy nó bằng cách kiểm tra đầu ra logcat.

Tôi đã sửa ngoại lệ và đột nhiên các bài kiểm tra của tôi đang chạy!


tương tự cho tôi. Có vẻ như ngoại lệ trong BeforeClass không được hiển thị đúng trong bảng điều khiển chạy
David Refaeli

1

Sau khi đối mặt với sự cố ngày hôm nay - không thể chạy các bài kiểm tra Android công cụ với lỗi bộ trống - tôi đã tìm thấy vấn đề git về vấn đề này và nhờ Stephan Linzner, tôi có thể chạy các bài kiểm tra.

tl; dr Bạn phải nhấp chuột phải vào gói thử nghiệm chứ không phải lớp để thực hiện thử nghiệm.

Tham khảo: https://github.com/googlecodelabs/android-testing/issues/27#issuecomment-219074863


0

Bài viết này đã giúp tôi: Bộ thử nghiệm trống

Về cơ bản, tôi phải tạo một gói - toolsTest / java - trong thư mục src và đặt tất cả các bài kiểm tra ở đó. Sau đó, tôi có thể thực hiện các thử nghiệm này riêng lẻ.


0

Tôi đã có một dự án Java thô nơi điều này đang xảy ra. Đơn giản là Java + JUnit4. Nó chắc chắn nằm cùng với thứ gì đó trong tệp .idea / hoặc .iml của bạn. Tôi gỡ bỏ của tôi, nhập lại và cuối cùng các bài kiểm tra chạy lại.


0

Lớp thử nghiệm có thể bị loại khỏi biên dịch. Sửa nó trong setting-compiler -lude.


0

Đây là các bước gỡ lỗi của tôi mà tôi thực hiện khi Android Studio đột ngột quyết định dừng chạy / kiểm tra gỡ lỗi (Và cậu bé làm điều này xảy ra thường xuyên một cách đáng kinh ngạc !!):

  • Xây dựng: → Xây dựng lại dự án
  • Khởi động lại thiết bị: Khởi động lại thiết bị / trình mô phỏng của bạn và thử lại
  • Chuyển đổi thiết bị: nếu bạn có cả điện thoại thông thường và trình giả lập, hãy rút phích cắm của một trong hai thiết bị và thử chạy nó chỉ với một trong các thiết bị
  • Android Studio: Tệp -> Vô hiệu hóa bộ nhớ đệm và khởi động lại
  • Activity Monitor / Task Manager: sắp xếp các tiến trình theo tên, xem có tiến trình không tên nào sử dụng nhiều ram không, đây là tiến trình "ma" từ Android studio cần phải bị giết
  • git revert: thử lưu trữ / hoàn nguyên mã mới nhất của bạn. Đôi khi có một lỗi biên dịch mà Android Studio / gradle bỏ sót và nó sẽ cố gắng chạy mã không thể biên dịch được.
  • Gỡ cài đặt sau đó cài đặt lại Android Studio.

Tôi sẽ bổ sung thêm các bản sửa lỗi khi tôi gặp phải chúng!


0

Tôi không làm gì cả và vấn đề đã biến mất sau nửa ngày đau đớn, tôi đã mở và đóng các dự án nhiều lần, chạy từng bài kiểm tra lớp theo cách thủ công, có lẽ điều đó đã khắc phục được sự cố của tôi.


0

Trong studio Android với spock framework, tôi đã thay đổi phiên bản gradle của mình từ 2.2.2 sang 3.2.1 và mọi thứ đều diễn ra tốt đẹp.


0

Câu trả lời được chấp nhận không giải quyết được vấn đề của tôi. Vì vậy, tôi quyết định sao chép ExampleInstrumentedTestđược tạo theo mặc định trong Android Studio và chạy mà không gặp bất kỳ sự cố nào, đổi tên nó trong quá trình sao chép (không Refactor-> Đổi tên sau khi sao chép!) Và dán nội dung bài kiểm tra đơn vị của tôi vào đó. Sau đó lỗi biến mất.


0

Tôi đã gặp phải lỗi "Bộ thử nghiệm trống" khi cố gắng chạy thử nghiệm đơn vị cục bộ trong dự án Android Studio 3.0 của mình.

Sau khi đọc tài liệu dành cho Nhà phát triển Android , tôi nhanh chóng nhận ra rằng vấn đề là do cấu hình gradle của tôi bao gồm các dòng sau.

testImplementation 'com.android.support.test:runner:0.5'
testImplementation 'com.android.support.test:rules:0.5'

Lớp AndroidJUnitRunner là một trình chạy thử nghiệm JUnit cho phép bạn chạy các lớp thử nghiệm kiểu JUnit 3- hoặc JUnit 4 trên thiết bị Android .

Vì các bài kiểm tra của tôi là cục bộ và do đó không bắt buộc phải chạy trên bất kỳ thiết bị nào, việc xóa các mục com.android.support.test ... ở trên đã cho phép tôi thực hiện các bài kiểm tra đơn vị.


0

Tôi đã thực hiện một số chèn trong một db trong phương thức @BeforeClass. Tôi nhận ra rằng tôi đã gặp sự cố ánh xạ đối tượng / cơ sở dữ liệu. Vấn đề ánh xạ dữ liệu này là nguyên nhân của vấn đề này đối với tôi.


0

Trong trường hợp của tôi, tôi đã thử nghiệm công cụ của mình androidTest/java/<package.name>/MyTestingClass, nhưng tôi đã đặt biến thể xây dựng hiện tại của mình thành "tiền sản xuất". Và có một điểm! Như được chỉ định trong tài liệu Android Studio :

Theo mặc định, tất cả các thử nghiệm đều chạy dựa trên kiểu xây dựng gỡ lỗi.

Thông báo Class not found. Empty test suite.tiếp tục xuất hiện cho đến khi tôi làm điều này:

  1. Thêm dòng này vào build.gradle của tôi :

    android{
        [...]
        testBuildType "preproduction"
    }
  2. Gradle đồng bộ hóa.
  3. Xóa các cấu hình thử nghiệm trước đây của tôi vì chúng không tính đến việc đồng bộ hóa Gradle này.

Sau đó, tôi thực hiện các bài kiểm tra một lần nữa và lần này chúng chạy hoàn hảo !!!


0

Điều này đã xảy ra với tôi khi tôi đánh dấu nhầm một biến lớp không phải giả lập với chú thích. @Mock Đã xóa chú thích và các bài kiểm tra đã chạy thành công. Điều này đã xảy ra với Junit 4.5 trên Android Studio


0

Không phải là một giải pháp mà là một cách giải quyết giúp bạn nhanh chóng trở lại đúng hướng:

  1. Trước hết, hãy tìm một thử nghiệm hoạt động. Tôi đang viết một bài kiểm tra mới mà tôi gặp lỗi 'bộ kiểm tra trống'. Tôi đã chạy các bài kiểm tra khác và chúng vẫn hoạt động như bình thường.

  2. Sao chép tệp thử nghiệm hoạt động. Chạy nó để đảm bảo rằng bản sao này hoạt động giống như bản gốc.

  3. Tháo phần thân và thay thế bằng mã thử nghiệm mới của bạn.

Kiểm tra bây giờ sẽ hoạt động.

Chúng tôi đã mất khoảng hai giờ để cố gắng tìm ra nguyên nhân nhưng vô ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.