【问题标题】:How to run a Junit5 test with Android dependencies and robolectric如何使用 Android 依赖项和 robolectric 运行 Junit5 测试
【发布时间】:2018-04-08 19:47:09
【问题描述】:

我正在尝试运行这样的单元测试:

    @org.junit.jupiter.api.Test
    void junit5codeCoverage() {
        final int result = new Foo().junit5();

        Assert.assertEquals(Looper.getMainLooper().getThread(), Thread.currentThread());

        assertEquals(-1, result);
    }

这是一个 Junit5 测试,带有 Android 依赖项(即 Looper.getMainLooper())和 Robolectric。

我正在使用junit5 android plugin from mannodermaus,它允许在 Android 设置中运行 junit5。但这不能开箱即用,因为它不会加载 robolectric。所以我尝试了alixwar's branch,它可以解决 robolectric 和 junit5 测试覆盖率问题,但仍然不会使用 Android 类。

我还开始研究如何在 junit5 上运行 robolectric 测试,这需要了解 RobolectricTestRunner 的工作原理以及如何将代码移植到 JUnit5 平台。我对新的 junit5 平台知之甚少,但我发现我可以在 org.junit.platform.runner.JUnitPlatform 运行器之上构建,以遵循测试运行器概念,它是 junit-platform-runner 包的一部分。但这与原来的 Junit4 SandBoxTestRunner 相差甚远,我无法完成移植。

那么实现 robolectric junit5 支持的最可行途径是什么,或者我是否缺少任何(明显的)概念?

【问题讨论】:

    标签: android junit robolectric junit5 robolectric-gradle-plugin


    【解决方案1】:

    我也在尝试这样做,但在撰写本文时,Robolectric 似乎根本不支持 junit5。

    在此处查看讨论:https://github.com/robolectric/robolectric/issues/2996

    该讨论中描述了一些解决方法,但现在我将坚持使用 junit4。

    【讨论】:

    • 1.5年后有这方面的消息吗?将 JUnit5 与 robolectric 一起使用会很棒!
    • 2020 年,该问题仍未解决:o
    【解决方案2】:

    您可以使用junit-vintage-engine 与来自 JUnit4 的运行器一起运行测试。

    只需将org.junit.vintage:junit-vintage-engine 添加到您的依赖项中,这样您就可以在您的测试中添加org.junit.runner.RunWith 注释。

    【讨论】:

    • 有关上述答案的更多详细信息:这意味着您需要将 JUnit4 @Test 用于使用 @RunWith(RobolectricTestRunner::class) 的测试。我建议从 gradle 构建中删除您的 JUnit 4 依赖项: testImplementation 'junit:junit:4.+' // 应该摆脱这个旧的 JUnit。
    • 大局是:让我们鼓励 Roboelectric 迁移到木星,这样我们就可以放弃这些特殊情况。
    猜你喜欢
    • 2015-07-08
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多