微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该使用 Scala Mock 模拟特征还是模拟类

如何解决我应该使用 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 举报,一经查实,本站将立刻删除。