6

Robolectric を使用して android.jar のスタブ化されたメソッドを置き換え、jMockit を使用して Android クラス (私の場合はフラグメント) をモックする単体テストを実装しようとしています。しかし、私はそれを機能させることができないようです。テスト クラスに で注釈を付けると、次の@RunWith(RobolectricTestRunner.class)ようになります。

java.lang.IllegalStateException: JMockit が正しく初期化されていません。jmockit.jar がクラスパスで junit.jar の前にあることを確認します (JUnit を使用している場合、そうでない場合はドキュメントを確認してください)

を使用しても使用し@RunWith(JMockit.class)なくても@RunWith、「Stub!」と表示されます。例外。

現時点では、私のクラスパスには、robolectric、jmockit、junit、android の順序があります。

jmockit と robolectric をうまく組み合わせてプレイできた人はいますか?

4

2 に答える 2

5

これは可能なはずです。私はこれをテストしていませんが、独自のテスト ランナーを作成できます。

JMockit と Robolectric テスト ランナーのソースを見てみましょう。

2 つのうち、Robolectric の方がはるかに複雑であるため、その機能を複製したくありません。JMockit テスト ランナーはかなり単純です。RobolectricTestRunner を拡張し、JMockit 機能を含めるように動作するはずです。

import mockit.internal.startup.*;
class MyTestRunner extends RobolectricTestRunner {

   static { Startup.initializeIfNeeded(); }

   /**
    * Constructs a new instance of the test runner.
    *
    * @throws InitializationError if the test class is malformed
    */
   public MyTestRunner(Class<?> testClass) throws InitializationError
   {
      super(testClass);
   }
}
于 2013-02-16T04:46:46.997 に答える
2

バージョン 1.8 (2014 年 4 月 27 日) では、JMockit は Robolectric と連携して動作します。

JMockit now works fine with the Robolectric Android testing tool (tested with Robolectric 2.2 and 2.3).

http://jmockit.org/changes.html

于 2015-03-09T06:19:13.990 に答える