Issue
I'm having trouble understanding a strange behavior when trying to test my suspending Spring Kotlin @Controller function:
@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
}
}
Test:
@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) {
//
// }
}
}
When I run the test the test is not run - Maven reports that no tests were found.
When I uncomment the for-loop the test will run and pass. when I replace the for-loop with a println("")
the test will also run and pass. When I replace it with assertThat(1).isEqualTo(1)
the test will not run.
Can somebody explain this?
Solution
The test is not discovered by JUnit whenever its return type is not void
.
See JUnit test methods can't return a value. I think this is quite unfortunate for the issue I came across.
Answered By - Hans Wurst
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.