繁体   English   中英

我应该使用 Scala 模拟来模拟特征还是模拟 Class

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM