【问题标题】:Junit5 testSuite with SelectClasses not working in android unit test带有 SelectClasses 的 Junit5 testSuite 在 android 单元测试中不起作用
【发布时间】:2021-08-12 02:10:46
【问题描述】:

我正在尝试为 android 应用程序的单元测试创​​建一个测试套件,但它总是因不同类型的配置错误而失败,其中之一如下,

FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':appModules:factList:testDebugUnitTest'.
> No tests found for given includes: [reprator.wipro.factlist.FactListTestSuite] 
 (filter.includeTestsMatching)

回购详情:https://github.com/TheReprator/Wipro/tree/junit5

分支:junit5

TestSuite 类:https://github.com/TheReprator/Wipro/blob/junit5/appModules/factList/src/test/kotlin/reprator/wipro/factlist/FactListTestSuite.kt

我尝试了很多努力和参考,其中一些如下,

  1. Link 1
  2. Link 2

我的整个代码与 master 分支中的 junit4 完美配合。

请帮忙。

【问题讨论】:

  • 使用 Android Studio Arctic fox 2020.3.1 我也遇到了 JUnit5 测试问题,未收到测试事件错误。您可能也有同样的问题。花了一天时间,但仍然找不到使用新的 android studio 运行 JUnit5 测试的方法。相同的测试适用于 JUnit4
  • 不确定但可能需要添加一些依赖项:junit-platform-launcher、junit-platform-engine?
  • 最后套件完成了, testImplementation("org.junit.platform:junit-platform-suite:1.8.0-RC1") testImplementation("org.junit.jupiter:junit-jupiter-api :5.8.0-RC1") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.0-RC1") 回购:github.com/TheReprator/Wipro/blob/master/appModules/factList/…

标签: android unit-testing junit junit4 junit5


【解决方案1】:

我看到您正在使用@RunWith(JUnitPlatform::class),它基本上说“嘿,请 JUnit5,运行我的 JUnit 4 测试!”但是你使用了org.junit.jupiter.api.Test 注释,它告诉平台这些是JUnit5 测试。

所以实际上,没有要运行的 JUnit 4 测试。

我建议您完全放弃套件,如果您希望测试套件使用嵌套类。或者使用Tag 注解对测试进行分组。

默认情况下,JUnit5 将运行您在测试源路径中拥有的所有 @Test 方法。检查你的 gradle 配置。

【讨论】:

  • 我什至也尝试过使用标签,但同样的错误,我得到了,“未收到测试事件”
【解决方案2】:

您是否使用 gradle 来运行测试?因为我下载了你的分支,在没有 android studio 的情况下设置了一个环境(我的个人电脑没有安装开发环境),我在你的 JUnit 5 分支上得到了这个输出:

./gradlew appModules:factList:test --rerun-tasks

FactListDataRepositoryImplTest > get fact list from server, on internet connection available() PASSED

FactListDataRepositoryImplTest > No internet available() PASSED

FactListApiServiceTest > get fact list request check() PASSED

FactListApiServiceTest > Timeout example() PASSED

FactListApiServiceTest > get fact list successfully() PASSED

FactListRemoteDataSourceImplTest > fetch list successfully from server and map it to UI pojo() PASSED

FactListRemoteDataSourceImplTest > fetch list failed with errorBody() PASSED

FactListMapperTest > create the parsed json fact into FactModals class with title() PASSED

FactListUseCaseTest > fetch factlist from remote data source() PASSED

FactListUseCaseTest > failed to load data, as internet is not available() PASSED

FactListViewModalTest > onRefresh, getlist successfully() PASSED

FactListViewModalTest > retry, getFactlist successfully() PASSED

FactListViewModalTest > get factList fetch failed on launch() PASSED

FactListViewModalTest > get factList successfully on launch() PASSED

...

> Task :appModules:factList:testReleaseUnitTest
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

FactListDataRepositoryImplTest > get fact list from server, on internet connection available() PASSED

FactListDataRepositoryImplTest > No internet available() PASSED

FactListApiServiceTest > get fact list request check() PASSED

FactListApiServiceTest > Timeout example() PASSED

FactListApiServiceTest > get fact list successfully() PASSED

FactListRemoteDataSourceImplTest > fetch list successfully from server and map it to UI pojo() PASSED

FactListRemoteDataSourceImplTest > fetch list failed with errorBody() PASSED

FactListMapperTest > create the parsed json fact into FactModals class with title() PASSED

FactListUseCaseTest > fetch factlist from remote data source() PASSED

FactListUseCaseTest > failed to load data, as internet is not available() PASSED

FactListViewModalTest > onRefresh, getlist successfully() PASSED

FactListViewModalTest > retry, getFactlist successfully() PASSED

FactListViewModalTest > get factList fetch failed on launch() PASSED

FactListViewModalTest > get factList successfully on launch() PASSED

也许您需要将构建操作委托给 gradle(在 IntelliJ 上可能,在 Android Studio 上不确定)或清除您的项目设置或类似的东西。

您可能正在尝试使用运行您的套件的Run Configuration,这是一个 JUnit4 套件,需要 JUnit4 测试,但您的测试是 JUnit5 测试。

【讨论】:

  • 首先感谢您为此付出的时间和精力。是的,代码运行良好“./gradlew appModules:factList:test --rerun-tasks”与 ide 或 teminal 但在我目前的情况下,我想用 junit 5 套件执行测试类集,而不是单独的跨度>
  • 别担心!我喜欢尝试,我在最后一分钟的技术博客文章中看到了你的评论。我不再在那里工作,一位同事要求我支持你,这是我们 DNA 文化的一部分;)关于你的问题,我建议你使用 JUnit 5 的更新版本(快照、里程碑),例如:github.com/junit-team/junit5/issues/744junit.org/junit5/docs/5.8.0-M1/user-guide/#test-suite 的文档这为 JUnit5 的测试套件提供了您想要的支持。计划为 5.8 提供套件支持;)
  • 哇,太棒了,你们真的太棒了,即使离开了你也跟着它
  • 最后套件完成了, testImplementation("org.junit.platform:junit-platform-suite:1.8.0-RC1") testImplementation("org.junit.jupiter:junit-jupiter-api :5.8.0-RC1") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.0-RC1") 回购:github.com/TheReprator/Wipro/blob/master/appModules/factList/…
  • 很高兴它成功了!
猜你喜欢
  • 2021-08-05
  • 2023-03-11
  • 2020-06-06
  • 1970-01-01
  • 2011-10-23
  • 2015-05-19
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
相关资源
最近更新 更多