如何在包含Android依赖和robolectric的环境下运行Junit5测试

15

我正在尝试运行一个类似这样的单元测试:

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

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

        assertEquals(-1, result);
    }

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

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

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

那么实现robolectric junit5支持最可行的路径是什么,或者有没有我正在忽略的(显而易见的)概念?

2个回答

5
您可以使用 junit-vintage-engine 来运行来自 JUnit4 的测试。
只需将 org.junit.vintage:junit-vintage-engine添加到您的依赖项中,因此您可以在您的测试中添加 org.junit.runner.RunWith 注释。

1
关于上面的答案的更多细节:这意味着您需要在使用@RunWith(RobolectricTestRunner::class)的测试中使用JUnit4 @Test。我建议从gradle构建中删除JUnit 4依赖项:testImplementation 'junit:junit:4.+' // 应该摆脱这个旧的JUnit。 - Lance Kind
4
大意是:让我们鼓励Roboelectric搬到木星,这样我们就可以摆脱这些特殊情况。 - Lance Kind

3

2
这个问题1.5年后有什么新消息吗?使用JUnit5和Robolectric将会非常棒! - ceedee
3
2020年了,这个问题仍然没有解决 :o - distante
1
即使到了2022年,这个问题仍然没有解决! - YektaDev
1
2023.... 寂静无声 - click_whir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接