【问题标题】:Why is Gradle able to mock final classes?为什么 Gradle 能够模拟最终课程?
【发布时间】:2015-04-08 17:19:35
【问题描述】:

Mockito 文档说您不能模拟最终类,但通过 Gradle 运行这样的测试是可行的。具体来说,我在一个 Android 项目中有一个单元测试,它具有以下内容:

@Mock
private ViewTreeObserver mockTreeObserver;
...
@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
    ...
}

ViewTreeObserver 是最后一个类。

我需要在 Eclipse 和 Android Studio 中支持旧版开发环境。使用包装器的 Studio 和 Gradle 命令行都通过。 Eclipse 失败了

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class android.view.ViewTreeObserver

还有“为什么?”如果可能的话,我真的需要知道如何让 Eclipse 通过(无需重写测试)。

各种库版本如下:

  • gradle-2.2.1(Studio 和命令行使用的包装器)
  • mockito-core-1.9.5
  • robolectric-2.4
  • android-20(Eclipse 中的单元测试类路径配置)

【问题讨论】:

  • 可能是由于 dex 编译器的转换。你会想要使用PowerMock
  • 你能创建一个可复制的小样本构建并在某个地方(例如 github)共享它,以便我可以查看它吗?

标签: android eclipse unit-testing gradle mockito


【解决方案1】:

我在尝试按照 Rene 的建议创建示例构建时发现了问题。有问题的测试缺少@RunWith(RobolectricGradleTestRunner.class) 注释。

RobolectricGradleTestRunner 扩展了RobolectricTestRunner 并解决了各种问题,包括在所有 Intellij、eclipse 和 Gradle 命令行中运行测试的能力。

因为没有发现这一点而感到有点愚蠢。在我的辩护中,我没有编写那个特定的测试......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多