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) {
...
}
预计
在 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) {
...
}