2: 不具合の検知を早くしたい
● Unit Test で実装漏れを assert できるようにする
Slide 40
Slide 40 text
[tips] [example] UnitTestで実装漏れを検知する
● ある enum class に新しい要素が追加されたことを検知する
enum class FooKey {
A,
B,
C
}
val SPECIFIC_PURPOSE_SET: Set =
setOf(FooKey.A, FooKey.B)
Slide 41
Slide 41 text
[tips] [example] UnitTestで実装漏れを検知する
● ある enum class に新しい要素が追加されたことを検知する
enum class FooKey {
A,
B,
C,
D
}
val SPECIFIC_PURPOSE_SET: Set =
setOf(FooKey.A, FooKey.B)
Slide 42
Slide 42 text
@Test
fun testKeyCompleteness() {
val definedKeys = SPECIFIC_PURPOSE_SET + KEYS_NOT_TO_SPECIFIC_PURPOSE_SET
FooKey.entries.forEach {
assertTrue(it in definedKeys)
}
}
@Test
fun testNoDuplicatedKeys() {
assertEquals(
SPECIFIC_PURPOSE_SET.size + KEYS_NOT_TO_SPECIFIC_PURPOSE_SET.size,
FooKey.entries.size
)
}
companion object {
private val KEYS_NOT_TO_SPECIFIC_PURPOSE_SET = setOf(
FooKey.C
)
}
Slide 43
Slide 43 text
[tips] [example] UnitTestで実装漏れを検知する
● (補足) 集合 S を S_1、S_2、...、S_nに分割するときに
素集合となる条件は以下2つを満たすことだから
∀ s ∈ S, ∃ i ( s ∈ S_i )
∀ i, j, s ∈ S_i ( i ≠ j ⇒ s ∉ S_j )
Slide 44
Slide 44 text
[tips] [example] UnitTestで実装漏れを検知する
● (補足) 集合 S を S_1、S_2、...、S_nに分割するときに
素集合となる条件は以下2つを満たすことだから
∀ s ∈ S, ∃ i ( s ∈ S_i )
∀ i, j, s ∈ S_i ( i ≠ j ⇒ s ∉ S_j )
testKeyCompletenessに対応
testNoDuplicateKeysに対応