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

问题描述 投票:0回答:3

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

    @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
测试。

我正在使用来自 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 支持的最可行的路径是什么,或者我是否缺少任何(明显的)概念?

android junit robolectric junit5 robolectric-gradle-plugin
3个回答
5
投票

您可以使用

junit-vintage-engine
使用 JUnit4 中的运行器运行测试。

只需将

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


4
投票

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

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

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


0
投票

我已经开始了一个实验项目:https://github.com/apter-tech/junit5-robolectric-extension

使用此扩展和 gradle 插件,您可以运行 Robolectric 测试并在测试中使用 JUnit5 Jupiter api。

如果您有任何疑问,请提出问题或拉取请求。

© www.soinside.com 2019 - 2024. All rights reserved.