mockito 如何在Kotlin中测试不存在的接口实现上的方法行为?

pnwntuvh  于 2022-11-29  发布在  Kotlin
关注(0)|答案(1)|浏览(140)

假设我有一个接口Animal,它有两个实现:DogCat,我们为这个类提供了一些方法:

fun Animal.sound() : String {
  if (this is Dog) return "woof"
  if (this is Cat) return "meow"
  return "globglogabgalab"
}

然后,我想测试此方法的所有情况
如果我没有默认行为的实现,我如何才能做到这一点(使用JUnit/Mockito)?

xxb16uws

xxb16uws1#

您可以将kotlins Sealed类与when语句结合使用,这样就不需要最后一个return语句,因为would语句是不可访问的。

sealed class Animal
class Dog : Animal()
class Cat : Animal()

而sound方法看起来像这样。

fun Animal.sound() = when (this) {
  is Cat -> "meow"
  is Dog -> "woof"
}

或者,如果没有密封类,您可以只创建一个TestAnimal实现,它在测试中实现Animal,然后示例化它并运行sound()方法。

class TestAnimal : Animal

@Test
fun foo() {
  TestAnimal().sound()
}

或者使用匿名实现

@Test
fun foo() {
  val animal = object : Animal {}

  animal.sound()
}

相关问题