2013-02-08 2 views
6

Robolectricを使用してandroid.jarのスタブ付きメソッドを置き換えながら、また、jMockitを使用してAndroidクラス(私の場合はFragment)をモックするために単体テストを実装しようとしています。しかし、私はそれを動作させるように見えることはできません。テストクラスに@RunWith(RobolectricTestRunner.class)という注釈を付けると、次のようになります。jmockitとrobolectricは共存できますか?

java.lang.IllegalStateException:JMockitが正しく初期化されていません。 (JUnitのを使用している場合、そうでない場合は、マニュアルを参照してください)そのjmockit.jarがクラスパスにjunit.jarを先行し確認してください、私は私が手@RunWith(JMockit.class)あるいは全く@RunWith、使用している場合

を「スタブを!」例外。

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

jmockitとrobolectricを一緒に遊ぶことができたのは誰ですか?

+0

それは私が考えるPowerMockに似ています。私はまだ解決策を知らない –

答えて

5

これが可能であるはずです。私はこれをテストしていませんが、あなた自身のテストランナーを作ることができます。 「2 Robolectric 1の

ははるかに複雑であるので、我々はドン:

はJMockitと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); 
    } 
} 
+0

面白い、提案のおかげで! –

+0

@Joe、私はPowerMockとRobolectricで同様のアプローチを試みていました。しかし、私はクイックツアーに失敗しました。それはかなり複雑です。たぶん私は第二ラウンドを行うだろう:) –

+0

これは助けになりませんでした。問題は、プロジェクトにJMockitの依存関係を追加すると(実際にどこでも使用することなく)、Roboelectricテストは「互換性のないメソッドが見つかりません:fireTestRunStarted」 – altumano

2

バージョン1.8(2004年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

関連する問題