如何解决我应该使用 Scala Mock 模拟特征还是模拟类
@ImplementedBy(classOf[DefaultFoo])
trait Foo {
def a (s : String) : Int
}
class DefaultFoo @Inject()() extends Foo{
override def a (s : String) = 1
}
@ImplementedBy(classOf[DefaultBaz])
trait Baz {
def b (s : String) : Int
}
class DefaultBaz @Inject()(val f :Foo) extends Baz{
override def a (s : String) = 1
}
如果我想测试,比如说 DefaultBaz,我通常使用 ScalaMock,我会在我的测试规范中模拟如下:
class DefaultBazSpec extends AnyWordSpec with MockFactory{
val mockFoo = mock[Foo]
val b = new DefaultBaz(mockFoo)
// write tests
}
但我也可以这样做:
val mockFoo = mock[DefaultFoo]
哪个更好?模拟 trait 或默认类实现?
解决方法
最好两者都不使用。通常应该避免模拟(尤其是在 Scala 中)。
但即使您决定继续模拟,模拟被测类也会破坏测试的全部目的:被测代码与生产代码没有任何共同之处。
模拟用于模拟被测类的依赖项(例如构造函数参数或方法参数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。