IntelliJ IDEA với Junit 4.7 ăn !!! Phiên bản JUnit 3.8 trở lên dự kiến:


206

Khi tôi thử chạy thử nghiệm sau trong IntelliJ IDEA, tôi nhận được thông báo:

"!!! JUnit phiên bản 3.8 trở lên dự kiến:"

Cần lưu ý rằng đây là một dự án Android tôi đang thực hiện trong IntelliJ IDEA 9.

public class GameScoreUtilTest {
    @Test
    public void testCalculateResults() throws Exception {
        final Game game = new Game();

        final Player player1 = new Player();
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(1);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        {
            final PlayedHole playedHole = new PlayedHole();
            playedHole.setScore(3);
            game.getHoleScoreMap().put(player1, playedHole);
        }
        final GameResults gameResults = GameScoreUtil.calculateResults(game);

        assertEquals(4, gameResults.getScore());
    }
}

Dấu vết ngăn xếp đầy đủ trông như thế này ...

!!! JUnit version 3.8 or later expected:

java.lang.RuntimeException: Stub!
    at junit.runner.BaseTestRunner.<init>(BaseTestRunner.java:5)
    at junit.textui.TestRunner.<init>(TestRunner.java:54)
    at junit.textui.TestRunner.<init>(TestRunner.java:48)
    at junit.textui.TestRunner.<init>(TestRunner.java:41)
    at com.intellij.rt.execution.junit.JUnitStarter.junitVersionChecks(JUnitStarter.java:152)
    at com.intellij.rt.execution.junit.JUnitStarter.canWorkWithJUnitVersion(JUnitStarter.java:136)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110)

Process finished with exit code -3

Intellij 9, bản vá mới nhất.
benstpierre

Tôi có giải pháp ở đây stackoverflow.com/questions/29172698/ Cách
voronnenok

Thành thật mà nói, cuối cùng tôi đã sử dụng plugin Android trong IntelliJ và cắn viên đạn và sử dụng Android Studio mới nhất. tất cả đều ổn
Kirby

Khi có người khác đến đây mà không có "Test" trong tên lớp Test của họ; bạn nên thêm "Test" anh em. Đặt tên lớp của bạn là "GameEngine" sẽ gây ra lỗi tương tự, bạn có thể giải quyết nó bằng cách đặt tên là "GameEngineTest". Chúc mừng!
thiệu

Câu trả lời:


364

Sự cố này xảy ra vì Nền tảng Android ( android.jar) đã chứa các lớp JUnit. Trình chạy thử IDEA tải các lớp này và thấy rằng chúng đến từ JUnit cũ, trong khi bạn đang cố gắng sử dụng các bài kiểm tra có chú thích là một tính năng của JUnit mới, do đó bạn gặp lỗi từ trình chạy thử.

Giải pháp rất đơn giản, hãy mở Project Structure| Modules| Dependenciesvà di chuyển junit-4.7.jarlên trên, để nó đến trước Android 1.6 Platform trong đường dẫn lớp. Bây giờ người chạy thử sẽ rất vui khi tải phiên bản JUnit mới.


9
Chỉ để làm cho mọi người biết đây vẫn là một vấn đề với các phiên bản Android sau này.
Chris.Jenkins

cũng đã giải quyết vấn đề trong maven bằng cách đặt android phụ thuộc được cung cấp sau khi phụ thuộc kiểm tra
avianey

18
Tôi có một dự án Android cấp độ sử dụng robolectric như được mô tả ở đây: peterfriese.de/android-testing-with-robolectric và khi tôi di chuyển Nền tảng Android ra khỏi 1st trong đường dẫn lớp, tôi nhận được ngoại lệ sau:Class not found: "com.example.intellijgradletest.MainActivityTest"
Heath

7
Trong IDEA 14.0.3 để thay đổi thứ tự phụ thuộc, bạn nên sử dụng các mũi tên. Kéo và thả không hoạt động.
david.perez

4
Trong studio android, các tệp phụ thuộc được tự động tạo. Do đó không thể di chuyển lên / xuống. Có cách nào khác để giải quyết vấn đề này không?
iMDroid

35

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

mô-đun của tôi là mô-đun thư viện java, vì vậy việc thay đổi JRE thành 1.8 java đã giải quyết được vấn đề.

Hoặc, bạn cũng có thể thực hiện trên toàn cầu thông qua Cài đặt mô-đun> Vị trí SDK> JDK, chỉ định JDK 8 của Oracle thay vì bản sao SDK của Android.


Điều này thực sự hoạt động và cũng có ý nghĩa cho bối cảnh vấn đề.
Đặc vụKnopf

Trong trường hợp của tôi, tôi cần thay đổi JRE cho Junit trong Mặc định
Rafael

Một cách khác: Chỉnh sửa jdk.table.xml của bạn tại ~/Library/Preferences/AndroidStudioX.X/options/jdk.table.xmlhoặc C:\Users\Name\.AndroidStudioX.X\config\options\jdk.table.xmltrên Windows. Tìm nút <name value="Android API 28 Platform" />và đặt nó <annotationsPath>thành <root url="jar://$USER_HOME$/Android-SDK/platforms/android-28/data/annotations.zip!/" type="simple" />. Cũng đảm bảo <classPath>nút chứa platforms/android-28/...trong cả hai URL đường dẫn tệp. Điều chỉnh "Android-SDK" thành tên thư mục của bạn.
Mr-IDE

Điều này làm việc cho tôi! Chỉ cần thay đổi từ Mặc định (API Android 28) thành 1.8 (Java) và nó hoạt động!
aiueoH

8

Tôi đã có vấn đề này với một dự án đa mô-đun (libgdx). Một mô-đun là Java thuần túy và có các thử nghiệm. Giải pháp của tôi là đặt "sử dụng JRE thay thế" thành "Java 1.8" trong cấu hình chạy thử nghiệm đơn vị của tôi. Điều này đảm bảo không có android.jar nào trên đường dẫn lớp và trình chạy 4.x của Junit được sử dụng.


Bạn không thực sự cần sử dụng 1.8. Đủ để chọn 1.7 không đi kèm với sdk Android.
kingston

8

Tôi đã gặp lỗi tương tự khi tạo cả hai Unit TestAndroid Instrument Testtrong Android Studio 1.4+ và nó bắt đầu bị lẫn lộn. Để tránh lỗi này chắc chắn lớp thử nghiệm của bạn thuộc Android TestsvềRun/Debug Configurations

  1. Hãy chắc chắn rằng bạn làm theo đúng hướng dẫn https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html
  2. Đảm bảo Test Artifacttrong Build Variantsđược đặt thànhAndroid Instrumentation Tests
  3. Bấm vào menu Run>Edit Configuration
  4. Đảm bảo tên lớp / phương thức của bạn ở bên trong Android Teststhay vìJUnit
  5. Nếu JUnitchỉ cần xóa cấu hình và nhấp chuột phải vào tệp bạn muốn kiểm tra và Runmột lần nữa. Sau đó, nó sẽ tạo cấu hình dưới Android Testsphần và nó chạy trên thiết bị / trình giả lập.

4
NÀY LÀM VIỆC CHO TÔI => Nếu nó ở trong JUnit, chỉ cần xóa cấu hình và nhấp chuột phải vào tệp bạn muốn kiểm tra và Chạy lại. Sau đó, nó sẽ tạo cấu hình trong phần Kiểm tra Android và nó chạy trên thiết bị / trình giả lập.
Devendra Vaja

Làm việc cho tôi là tốt. Tôi đã chạy thử nghiệm tương tự sau khi di chuyển nó từ testthư mục này sang androidTestthư mục khác. Android Studio đã không cập nhật cấu hình chạy sau khi thực hiện việc này
Daniil

5

Đối với Android Studio - bắt đầu từ Android Studio 1.1 Beta 4 , Google đã thêm hỗ trợ cho plugin Android Gradle 1.1.0-RC . Plugin mới hỗ trợ Kiểm tra đơn vị thông qua Android Studio bằng cách sử dụng Junit 4+.

Đây vẫn là thử nghiệm và có một số bước thủ công để thiết lập điều này.


Nó hoạt động nhưng Android Studio vẫn có vấn đề với cấu hình tự động tạo cho các thử nghiệm, vì vậy mỗi lần bạn phải sửa cấu hình đang chạy bằng cách chọn lại gói kiểm tra. Nếu không, NullPulumException trong quá trình chạy thử.
Alfishe 22/2/2015

4

Đối với tất cả những người đang đọc bài đăng này và vẫn có cùng một vấn đề với AndroidStudio 1.0. Bạn không thể thay đổi thứ tự phụ thuộc trong AndroidStudio để IDE tự động viết lại chúng. Và, ngay cả khi bạn quản lý để thay đổi thứ tự bằng cách sửa đổi tệp .iml, bạn sẽ nhận được "lớp không tìm thấy ...". Điều này là do đường dẫn đầu ra Kiểm tra không thể được đặt trên AndroidStudio.

Trên thực tế, có giải pháp để làm cho AndroidStudio, Junit và Robolectric hoạt động cùng nhau. Hãy xem https://github.com/JCAndKSolutions/android-unit-test này và sử dụng plugin này: https://github.com/evant/android-studio-unit-test-plugin

Hoạt động hoàn hảo cho tôi.


2

Tôi đã gặp lỗi tương tự khi tôi tạo gói Junit của riêng mình

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

Để khắc phục điều này, tôi đã thêm hai dòng này vào tệp lớp ứng dụng của mình như được giải thích ở đây :

dependencies {
    ...
    // Required -- JUnit 4 framework
    testCompile 'junit:junit:4.12'
    // Optional -- Mockito framework
    testCompile 'org.mockito:mockito-core:1.10.19'
}

1

Có hai điều tôi có thể tưởng tượng sẽ xảy ra

  • Nếu IDE của bạn cố gắng bắt đầu thử nghiệm Android Junit chạy trực tiếp trên trình giả lập, bạn không thể sử dụng Junit4.
  • Nếu bạn vô tình sử dụng các lớp Junit được cung cấp từ jar Android, chúng không thể chạy trên jvm bình thường vì chỉ có các lớp được biên dịch thực sự cho android dalvik vm.

1

Điều này cũng xảy ra với tôi trong Android Studio 1.1 - mặc dù nó nên hỗ trợ kiểm tra đơn vị mà không cần plugin.

Trên các máy khác (cùng dự án, cùng phiên bản AS) Tôi thấy rằng khi chạy thử nghiệm đơn vị, IDE không thêm tệp android.jar vào đường dẫn lớp, trong khi trong máy của tôi thì có.

Dự đoán tốt nhất của tôi là do chuyển đổi chúng tôi đã thực hiện từ Maven sang Gradle và chuyển từ intellij sang AS một số bộ đệm của cài đặt vẫn ở đâu đó trong máy của tôi khiến android.jar được thêm vào đường dẫn lớp.

Những gì tôi đã làm là xóa tất cả các bộ nhớ cache liên quan đến Android khỏi máy của tôi (trong thư mục c: \ users \ USRE_NAME): .android .AndroidStudio .gradle .m2

Sau đó tôi mở lại dự án và các thử nghiệm đã hoạt động.

Vẫn đang cố gắng để hiểu những gì đã sai, nhưng điều này nên làm cho mẹo bây giờ.


1

Tôi gặp vấn đề này trong Android Studio 1.5, vì tôi không biết rằng tôi phải chuyển cài đặt "Test Artifact" trong "Biến thể xây dựng" (góc dưới bên trái của cửa sổ chính) từ "Thử nghiệm thiết bị Android" sang "Thử nghiệm thiết bị Android" ". Khi bạn làm như vậy, bạn có thể thấy tệp exampleUnitTest.java trong cửa sổ Dự án.


1

Tôi đã có cùng một vấn đề nhưng vì một lý do khác. Tôi đã tham gia IntelliJ với một dự án phân lớp java thông thường (không phải Android) nhưng JDK đã được đặt thành SDK Android trong Project Structure(là JDK mặc định vì một số lý do). Điều này thực sự ngu ngốc nhưng IntelliJ không đủ tốt để chỉ cho tôi biết điều gì sai, vì vậy tôi đã bị mắc kẹt về điều đó.


1

Đây là cách tôi giải quyết nó:

Chỉnh sửa cấu hình -> Mặc định -> Android JUnit -> Thêm phần sau vào Thư mục làm việc:

$ MODULE_DIR $


1

Đối với tôi, vấn đề này là do cấu hình chạy lỗi thời / lỗi cho các bài kiểm tra. Tôi chỉ đơn giản là phải xóa cấu hình, sau đó tạo một cái mới và vấn đề đã được khắc phục.

Xóa cấu hình kiểm tra cũ


0

Trong dự án Android tôi đã có minifyEnabled = true, sau khi tôi thay đổi nó thành falsemọi thứ hoạt động.


0

Nếu bạn loại bỏ

testOptions {
    unitTests.returnDefaultValues = true
}

từ build.gradlenó nó sẽ hoạt động


0

Chuyển đến Cấu trúc dự án -> Cài đặt nền tảng, thay đổi SDK thành 1.8 đã giải quyết vấn đề của tôi.


0

Tôi cũng đã phải đối mặt với cùng một vấn đề, sau khi đổi thành bản dựng. Nâng cấp nó hoạt động tốt với tôi.

thay đổi phiên bản Junit của bạn bên trong build.gradle thành:

    testImplementation 'junit:junit:3.8'

0

Tôi đã làm theo câu trả lời của CrazyCoder nhưng không có tập tin Junit nào được hiển thị trong phần phụ thuộc. vì vậy tôi đã tải xuống một từ http://www.java2s.com/Code/Jar/j/Doadjunitjar.htm , sau đó thêm nó bằng cách nhấn nút dấu cộng bên phải. Va no đa hoạt động


0

Tắt "Sử dụng JDK nhúng" trong Vị trí cấu trúc dự án / SDK là điều giúp ích cho trường hợp của tôi nhưng tôi không biết chính xác lý do khiến nó thất bại ở nơi đầu tiên.


0

Thay thế android.jar của bạn trong thư mục libs bằng thư mục mới nhất. Bạn có thể tải nó từ đây


0

Trong AndroidStudio, Open Project Structure -> SDK Locationbạn có thể thấy JDKvị trí, thay đổi sử dụng "Sử dụng JDK nhúng" để bạn sở hữu JDKđể áp dụng, sau đó đổi lại thành "Sử dụng JDK nhúng" , có thể nó hoạt động


0

Trong trường hợp của tôi, sự thay đổi JREtrong Run Configurationsliều giải quyết vấn đề, nhưng khi tôi bấm nút chạy bên cạnh các chức năng kiểm tra, các JREtùy chọn này sẽ thiết lập lại để mặc định.

Cuối cùng, tương tự như câu trả lời của @CrazyLiu, trong Project Structure - SDK Location - JDK, chọn Embedded JDK. Bởi vì không có hộp kiểm trong Android Studio 3.6.


0

Tôi nhận được tin nhắn tương tự

JUnit version 3.8 or later expected

bởi một sai lầm đơn giản cho người mới bắt đầu. Tôi đã sử dụng cùng tên gói và tên lớp trên src / main và src / test cho một lớp (lớp HomeContoder trong trường hợp của tôi):

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--ApplicationTest.java
          +--controller
            +--HomeController.java  <---- same package and class name: not good!

Cùng với đó, lớp src / main HomeContoder, cũng như lớp src / test HomeContoder, có cùng một đường dẫn đầy đủ:

com.example.controller.HomeController.class

Kết quả: mọi thử nghiệm phụ thuộc vào lớp HomeContoder đều thất bại.

Thay đổi tên gói và / hoặc tên lớp đã giải quyết vấn đề. Ở đây ví dụ, khi cả hai, tên gói và tên lớp được thay đổi:

my-test-project
  +--pom.xml
  +--src
    +--main
      +--com
        +--example
          +--Application.java
          +--controller
            +--HomeController.java
    +--test
      +--com
        +--example
          +--test                       <---- added (optional)
            +--ApplicationTest.java
            +--controller
              +--HomeControllerTest.java    <---- changed

Bây giờ tên lớp đủ điều kiện khác nhau. Tên lớp src / main HomeContoder là:

com.example.controller.HomeController.class

và tên lớp src / test HomeHontrollTest là:

com.example.test.controller.HomeControllerTest.class

Với các tên lớp đủ điều kiện là duy nhất, vấn đề biến mất.

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.