Davide Giuseppe Farella
10/27/2022, 5:11 PMsealed interface AffectsA
sealed interface AffectsB
sealed interface Action {
object Act1 : Action, AffectsA
object Act2 : Action, AffectsA, AffectsB
object Act3 : Action, AffectsB
}
and a class like
class Reducer(
private val subReducer1: X,
private val subReducer2: Y
) {
fun reduce(state: State, action: Action): State =
when (action) {
is Act1 -> state.copy(
a = subReducer1.reduce(state.a, action)
)
Act2 -> state.copy(
a = subReducer1.reduce(state.a, action),
b = subReducer2.reduce(state.b, action)
)
Act3 -> state.copy(
b = subReducer2.reduce(state.b, action)
)
}
}
I wanna test that for every action, the correct sub-reducer is called. Something like
reducer.reduce(someState, Act2)
verify {
subReducer1.reduce(someState.a, Act2)
subReducer2.reduce(someState.b, Act2)
}
///
reducer.reduce(someState, Act3)
verify {
subReducer1 wasNot Called
subReducer2.reduce(someState.b, Act2)
}
I usually like to use org.junit.runners.Parameterized
for these cases, but I wanna ensure that all the cases are covered, a.k.a. every sub-type of Action.
Got any idea?dave08
11/16/2022, 1:33 PMdave08
11/16/2022, 1:36 PMDavide Giuseppe Farella
11/16/2022, 4:20 PM