9

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

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

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

        assertEquals(-1, result);
    }

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

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

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

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

4

2 回答 2

3

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

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

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

于 2018-07-27T23:46:45.870 回答
1

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

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

于 2021-07-12T08:31:18.210 回答