测试暂停功能 - 没有找到测试(有时)
Testing suspending function - no tests were found (sometimes)
我在尝试测试我的挂起 Spring Kotlin @Controller 函数时无法理解一个奇怪的行为:
@Controller
class PersonRSocketController(val personRepository: PersonRepository) {
private val sharedFlow = flow<Person> {
for (i in 1..1000) {
emit(Person(i.toLong(), firstName = "$i - firstName", lastName = "$i - lastName"))
}
}.buffer(100).shareIn(GlobalScope, SharingStarted.WhileSubscribed(replayExpirationMillis = 0),replay = 0)
@MessageMapping("currentpersons")
suspend fun currentPersons(): Flow<Person?> {
return sharedFlow
}
}
测试:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RsocketServerAppTests @Autowired constructor(
val rSocketRequesterBuilder: RSocketRequester.Builder,
@LocalServerPort val serverPort: Int
) {
@Test
fun testRSocket() = runBlocking{
val requestSpec =
rSocketRequesterBuilder.websocket(URI.create("ws://localhost:$serverPort/rsocket")).route("currentpersons")
var result = requestSpec.retrieveFlow<PersonDataRequest>()
assertThat(result.first().firstName).isEqualTo("1 - firstName")
// for (i in 1..2) {
//
// }
}
}
当我 运行 测试时,测试不是 运行 - Maven 报告没有找到测试。
当我取消注释 for 循环时,测试将 运行 并通过。当我用 println("")
替换 for 循环时,测试也会 运行 并通过。当我用 assertThat(1).isEqualTo(1)
替换它时,测试不会 运行。
有人可以解释一下吗?
只要 return 类型不是 void
,JUnit 就不会发现该测试。
参见 。我认为这对于我遇到的问题来说是非常不幸的。
我在尝试测试我的挂起 Spring Kotlin @Controller 函数时无法理解一个奇怪的行为:
@Controller
class PersonRSocketController(val personRepository: PersonRepository) {
private val sharedFlow = flow<Person> {
for (i in 1..1000) {
emit(Person(i.toLong(), firstName = "$i - firstName", lastName = "$i - lastName"))
}
}.buffer(100).shareIn(GlobalScope, SharingStarted.WhileSubscribed(replayExpirationMillis = 0),replay = 0)
@MessageMapping("currentpersons")
suspend fun currentPersons(): Flow<Person?> {
return sharedFlow
}
}
测试:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class RsocketServerAppTests @Autowired constructor(
val rSocketRequesterBuilder: RSocketRequester.Builder,
@LocalServerPort val serverPort: Int
) {
@Test
fun testRSocket() = runBlocking{
val requestSpec =
rSocketRequesterBuilder.websocket(URI.create("ws://localhost:$serverPort/rsocket")).route("currentpersons")
var result = requestSpec.retrieveFlow<PersonDataRequest>()
assertThat(result.first().firstName).isEqualTo("1 - firstName")
// for (i in 1..2) {
//
// }
}
}
当我 运行 测试时,测试不是 运行 - Maven 报告没有找到测试。
当我取消注释 for 循环时,测试将 运行 并通过。当我用 println("")
替换 for 循环时,测试也会 运行 并通过。当我用 assertThat(1).isEqualTo(1)
替换它时,测试不会 运行。
有人可以解释一下吗?
只要 return 类型不是 void
,JUnit 就不会发现该测试。
参见