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-engine
JUnit4 中的运行器来运行测试。
只需添加org.junit.vintage:junit-vintage-engine
到您的依赖项,这样您就可org.junit.runner.RunWith
以为您的测试添加注释。
我也在尝试这样做,但似乎在撰写本文时,Robolectric 根本不支持 junit5。
请参阅此处的讨论:https ://github.com/robolectric/robolectric/issues/2996
该讨论中描述了一些解决方法,但现在我将坚持使用 junit4。