6

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

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

如果我使用@RunWith(JMockit.class)或不使用@RunWith,我会得到“存根!” 例外。

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

有没有人能够让 jmockit 和 robolectric 一起玩得很好?

4

2 回答 2

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);
   }
}
于 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 回答