jmockit和robolectric可以共存吗?

时间:2013-02-08 20:39:39

标签: android robolectric jmockit

我正在尝试使用Robolectric来实现单元测试来替换android.jar中的stubbed方法,同时还使用jMockit来模拟Android类(在我的例子中是Fragment)。但是,我似乎无法让它发挥作用。如果我使用@RunWith(RobolectricTestRunner.class)注释测试类,我会得到:

  

java.lang.IllegalStateException:JMockit未正确初始化;检查jmockit.jar是否在类路径中的junit.jar之前(如果使用JUnit;如果没有,请查看文档)

如果我使用@RunWith(JMockit.class)或不使用@RunWith,我会收到“Stub!”异常。

目前,我的类路径按以下顺序排列:robolectric,jmockit,junit,android。

那里有人能够让jmockit和robolectric一起玩得好吗?

2 个答案:

答案 0 :(得分:5)

这应该是可能的。我没有对此进行测试,但您可以创建自己的测试运行器。

看看JMockit和Robolectric测试跑步者的来源:

在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);
   }
}

答案 1 :(得分: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