假设我有一个接口Animal,它有两个实现:Dog和Cat,我们为这个类提供了一些方法:
Animal
Dog
Cat
fun Animal.sound() : String { if (this is Dog) return "woof" if (this is Cat) return "meow" return "globglogabgalab" }
然后,我想测试此方法的所有情况如果我没有默认行为的实现,我如何才能做到这一点(使用JUnit/Mockito)?
xxb16uws1#
您可以将kotlins Sealed类与when语句结合使用,这样就不需要最后一个return语句,因为would语句是不可访问的。
when
sealed class Animal class Dog : Animal() class Cat : Animal()
而sound方法看起来像这样。
fun Animal.sound() = when (this) { is Cat -> "meow" is Dog -> "woof" }
或者,如果没有密封类,您可以只创建一个TestAnimal实现,它在测试中实现Animal,然后示例化它并运行sound()方法。
TestAnimal
sound()
class TestAnimal : Animal @Test fun foo() { TestAnimal().sound() }
或者使用匿名实现
@Test fun foo() { val animal = object : Animal {} animal.sound() }
1条答案
按热度按时间xxb16uws1#
您可以将kotlins Sealed类与
when
语句结合使用,这样就不需要最后一个return语句,因为would语句是不可访问的。而sound方法看起来像这样。
或者,如果没有密封类,您可以只创建一个
TestAnimal
实现,它在测试中实现Animal
,然后示例化它并运行sound()
方法。或者使用匿名实现