11

Robolectric Deckard-gradle プロジェクトをhttps://github.com/robolectric/deckard-gradleからダウンロードし、Android Studio にインポートしました。

私の最初の実行で私は得た

!!! 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)

エラーと私は .iml からこれを修正しました。

それから私は得ました:

Class Not Found "my test class"

この問題についてグーグルで見つけた数十の解決策を試しましたが、どれもうまくいきませんでした。

4

5 に答える 5

5

更新: Android Studio 1.1.0 では、JUNIT 4 テストのサポートが IDE に追加されました。詳細については、https ://sites.google.com/a/android.com/tools/tech-docs/unit-testing-support を参照してください。これで STUB 例外が修正されるはずです。

Alex のオプション 1 が正しい答えです。現在 2 つのプロジェクトで使用していますが、このようにしなければならないのは残念ですが、今できることはそれだけです。

詳細な手順は次のとおりです。

  1. STUB EXCEPTION が表示されたら、最初の灰色の行を完全にエディターにコピーします。
  2. この行で、-classpath の前のすべてと、最後の .jar エントリの後のすべてを削除します。(アレックスが言ったように、クラスパスだけでなく、その後の残りも削除します)
  3. junit を検索し、次のような行を/path/in/filesystem/.gradle/caches/modules-2/files-2.1/junit/junit/4.11/4e031bb61df09069aeb2bffb4019e7a5034a4ee0/junit-4.11.jar:の先頭に移動します。 「-classpath」ディレクティブの直後の依存関係。
  4. -classpath "/dependency1:/dependency2:/...:/Users/user/path/to/project/app/build/test-classes" のように、クラスパスの最後にテスト クラスの出力ディレクトリを追加します。
  5. テストまたはアプリを開始するドロップダウン メニューの [実行構成] に移動します。
  6. junit テスト構成 (Android テストではなく、以前に実行しようとしたもの) で、上記のテキストを VM オプションとして追加します。
  7. [OK] を押してテストを実行すると、ほら、うまくいきます。

ちなみに、出力テストソースを生成するために、追加する必要がありました

apply plugin: 'idea'
idea {
    module {
        testOutputDir = file('build/test-classes/debug')
    }
}

モジュールの build.gradle に

UI を使用しようとしてもエラーが発生する場合は、Android Studio に含まれているターミナルに移動し、プロジェクトとテストの lint チェックを実行する ./gradle clean check (または同等のコマンド) を使用します。テストで問題が発生した場合は、そこで通知され、HTML ページで結果を表示することができます。

于 2014-10-29T17:12:08.953 に答える
2

私は同じ問題に苦労していましたが、最終的にこのソリューションで動作するようになりました(Android Studio 1.0.2およびRobolectric 2.4の場合):

  • モジュールの *.iml に移動し、order-entrywithjdkType='Android SDK'を他のすべての要素の一番下に移動しますorder-entry(これにより、「スタブ」の問題が修正されます)。

  • また、*.iml ファイルでoutput-test、-element のすぐ下に次のエントリを追加しますoutput。次のようになります。

<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/test-classes" />
  • 最後に、実行構成に移動します Android Studio メニュー -> 実行 -> 構成の編集
    • 新しい Gradle 構成を追加し (「+」をクリック -> 「Gradle」を選択)、「Compile test classes」(または同様のもの) という名前を付け、モジュールを Gradle プロジェクトとして選択します (入力フィールドの横にあるアイコンを使用して簡単に選択)、タスクに「compileDebugTestJava」を入力し、「適用」をクリックします
    • 次に、JUnit 実行構成を見つけて、下部にある「起動前: Make」セクションを見つけます。「+」をクリックして、「別の構成を実行」を選択します。'Compile test classes' (または Gradle タスクに設定した名前) を選択し、最後に、既に存在するはずの 'Make' エントリの前にそのエントリを移動します。

これは私にとって完璧に機能します。これで、Android Studio から直接テストを実行できるようになり、クラスパスを操作する必要がなくなりました。だからこそ、こちらの方が便利だと思います。

于 2015-01-09T07:33:53.250 に答える
0

nemoからのコメントはすでにそれを指摘しています。iml ファイルを変更できます。(このファイルは多くの場合、Android Studio から書き直されます) カスタム gradle タスクを使用して、Android Studio 内で単体テストを有効にします。iml ファイルを変更し、パスをテスト実行用の予期されるパスに変更します。Androidスタジオは現在ではなく、次のテスト実行でのみ変更を取得するため、テストを実行するためにテストを2回実行する必要がある場合があります。

これは、gradle ファイルに含めることができる完全な例ですhttps://github.com/nenick/android-gradle-template/blob/master/Scripts/android-studio-robolectric-support.gradle

于 2014-09-09T06:02:26.257 に答える
0

そのため、Android Studio の問題を解決するために留意すべき点はほとんどありませんが、推奨される方法はほとんどありません。

  1. これまで Android 開発に推奨されている JDK 1.7 を使用していることを確認してください。【設定を直してください】
  2. 現在の Robolectric-gradle プラグイン バージョン 1.0.1 は、android-gradle バージョン 1.1.0 と互換性があります [build.gradle ファイルを確認してください]
  3. テストを「src/test」ディレクトリに配置し、APP build.gradle (「android」内) で次のように指定します。

sourceSets { testLocal { setRoot('src/test') } }

  1. 「Project」タブの「src/test/java」フォルダを右クリックし、「Mark Directory As」>「Test Sources Root」をクリックします。

追加するために、私は IDEA コミュニティ エディションを使用していますが、正常に動作します。また、.iml ファイルをハックしたり、IDE 内の他のさまざまな設定を調べたりする必要はありません。

于 2015-05-01T07:02:01.127 に答える