【问题标题】:ScalaMock Inheritied Trait Function of Object ScalaTestScalaMock继承对象ScalaTest的特征函数
【发布时间】:2017-03-24 20:28:54
【问题描述】:

我正在尝试测试一个函数,但是我正在测试的函数调用了我想要存根的特征函数。我似乎无法使用 ScalaMock 存根此函数,因为我无法模拟该对象。

trait[A<:CommonReturn] commonTrait[A] {
    def commonFunction(s:String):(String,String) = {
        ("Hello","World")
    }
    def testMe(s:String) : A
}

这个特征然后被许多对象扩展,每个对象都实现 commonTrait 并返回它们特定的公共返回子类型。

object ob extends commonTrait[ConcreteType] {
    override def testMe(s:String){
        val(x,y) = commonFunction(s)
        val z = "unique logic"
        ConcreteType(x,y,z)
    }
}

因此,我现在正在尝试测试 ob.testMe,但我似乎无法模拟 ob 对象,因此无法存根 commonFunction。

这是因为我的架构吗?或者是否可以使用 scalamock 模拟对象并使用 scalatest?

val mocked = mock[ob]
(mocked.commonFunction _).expect(*).returning("test","test")

这不会编译。

【问题讨论】:

  • 如果您的示例中 commonFunction 不在 testMe 范围内,您会遇到同样的问题吗?

标签: scala unit-testing architecture scalatest scalamock


【解决方案1】:

你不能用 ScalaMock 模拟对象,因为 mock[X] 是 X 的子类。Scala 不允许对象的子类。

如果您需要测试与此commonFunction 的协作,那么继承会变得相当困难。我会考虑使用依赖注入来设计它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多