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

时间:2017-10-27 08:50:53

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

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

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

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

        assertEquals(-1, result);
    }

这是使用Robolectric进行Android依赖性(即Looper.getMainLooper())的 Junit5 测试。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

在该讨论中描述了一些解决方法,但是现在我只继续使用junit4。

答案 1 :(得分:0)

您可以使用 junit-vintage-engine 使用 JUnit4 中的运行程序运行测试。

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