Reputation: 10364
Creating a nested test within a parameterized test in JUnit5.
There are many conditions for the Android ViewModel using param. tests. I want to organize the tests within the param. test to improve output readability.
@ExtendWith(InstantExecutorExtension::class)
class ContentViewModelTest {
private fun `FeedLoad`() = Stream.of(
FeedLoadTest(isRealtime = false, feedType = MAIN, timeframe = DAY, lceState = LOADING),
FeedLoadTest(isRealtime = false, feedType = MAIN, timeframe = DAY, lceState = CONTENT))
@ParameterizedTest
@MethodSource("FeedLoad")
fun `Feed Load`(test: FeedLoadTest) {
@Nested
class FeedLoadNestedTest {
@Test
fun `all fields are included`() {
assertThat(4).isEqualTo(2 + 2)
}
@Test
fun `limit parameter`() {
assertThat(4).isEqualTo(3 + 2)
}
}
...
}
data class FeedLoadTest(val isRealtime: Boolean, val feedType: FeedType,
val timeframe: Timeframe, val lceState: LCE_STATE)
}
The normal parameterized assertions [not depicted] work as expected. The nested FeedLoadNestedTest
does not run within the Stream of parameterized FeedLoad
tests.
Upvotes: 1
Views: 2401
Reputation: 10364
@Sam Brannen, thanks for the feedback!
Sam has indicated on GitHub, @Nested
annotation on local classes will not be a viable option.
We have no plans to support @Nested on local classes defined within the scope of a method (function in Kotlin).
This will allow for assertions and logic to be organized into separate parameterized functions while testing the same data passed in via the stream.
@ParameterizedTest
@MethodSource("FeedLoadStream")
fun `Feed Load Part One`(test: FeedLoadTest) {
...
}
@ParameterizedTest
@MethodSource("FeedLoadStream")
fun `Feed Load Part Two`(test: FeedLoadTest) {
...
}
@ParameterizedTest
@MethodSource("FeedLoadStream")
fun `Feed Load Part Three`(test: FeedLoadTest) {
...
}
Upvotes: 1