JUnit 5 - 参数化嵌套测试

JUnit 5 - Parameterized Nested Tests

预计

在 JUnit5 的参数化测试中创建嵌套测试。

使用参数的 Android ViewModel 有很多条件。测试。我想在参数中组织测试。测试以提高输出的可读性。

@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)
}

观察到

正常的参数化断言[未描述]按预期工作。嵌套 FeedLoadNestedTest 不 运行 在参数化 FeedLoad 测试流中。

@Sam Brannen,感谢您的反馈!

Sam 在 GitHub, @Nested annotation on local classes 上表示这不是一个可行的选择。

We have no plans to support @Nested on local classes defined within the scope of a method (function in Kotlin).

解决方案

实施在同一流中通过的多个参数化测试。

这将允许将断言和逻辑组织到单独的参数化函数中,同时测试通过流传入的相同数据。

@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) {
    ...
}