我应该使用Scala Mock来模拟Trait还是模拟类?



假设我有以下内容:

@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还是默认的类实现?

最好两者都不用。一般应该避免mock(特别是在Scala中)。

但是,即使您决定继续使用mock, mock被测类也破坏了测试的整个目的:被测代码与生产代码没有任何共同之处。

mock用于模拟依赖项(例如,构造函数参数或方法参数)

相关内容

  • 没有找到相关文章

最新更新