如何使用 Android 依赖项和 robolectric 运行 Junit5 测试

joe*_*cks 9 junit android robolectric robolectric-gradle-plugin junit5

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

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

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

        assertEquals(-1, result);
    }
Run Code Online (Sandbox Code Playgroud)

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

我正在使用mannodermaus 的 junit5 android 插件,它允许在 Android 设置中运行 junit5。但这不是开箱即用的,因为它不会加载 robolectric。所以我尝试了alixwar 的分支,它可以解决 robolectric 和 junit5 测试覆盖率,但仍然不会使用 Android 类。

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

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

小智 5

您可以使用junit-vintage-engineJUnit4 中的运行器来运行测试。

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

  • 大局是:让我们鼓励 Roboelectric 搬到木星,这样我们就可以放弃这些特殊情况。 (4认同)

yuv*_*val 4

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

请参阅此处的讨论:https ://github.com/robolectric/robolectric/issues/2996

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

  • 2020 年,该问题仍未解决:o (3认同)
  • 1.5年后有消息吗?将 JUnit5 与 robolectric 结合使用会很棒! (2认同)
  • 2023 .... *蟋蟀* (2认同)