[英]Should I Mock the Trait or Mock the Class Using 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]
哪一个更好? 模拟特征还是默认的 class 实现?
最好都不用。 Mocking 通常应避免(尤其是在 Scala 中)。
但是,即使您决定继续使用模拟,mocking 被测 class 破坏了整个测试目的:被测代码与生产代码没有任何共同之处。
模拟用于被测 class 的 mocking依赖项(例如构造函数参数或方法参数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.