gpt4 book ai didi

scala - 模拟 Scala 对象和函数

转载 作者:行者123 更新时间:2023-12-04 23:39:03 26 4
gpt4 key购买 nike

我有一个 Scala 对象,它包含一些实用程序函数。这些函数由同一对象中存在的其他函数或其他类/对象调用。是否可以模拟这个对象或函数,以便我可以对调用它们的类进行单元测试。

例子:

object Util {

def methodA() = {
//other code
methodB()
//other code
}

def methodB() = {
//other code
methodC()
//other code
}

def methodC() = { ... }

}

在这里我从另一个类调用对象函数
class Data {

//other code

def call() = {
//other code
Util.methodA()
//other code
}
}

如何对 Data 类的函数 call() 进行单元测试?在 Java 中,我可以为 Util 创建一个模拟对象并设置对 methodA() 调用的期望,但这在 Scala 中是不可能的,因为没有模拟库支持模拟 Scala 对象。

最佳答案

从某种意义上说,问题在于您使用的模式类似于 Java 中的静态类。您不能模拟静态类,这就是 Java 模式通常不支持这种方法的原因。

另一方面,在 Scala 中你可以。使 Util 扩展一个特征并实现它。

trait UtilityMethods {
def methodA()
def methodB()
}

object Utils extends UtilityMethods {
def methodA() = {}
def methodB() = {}
}

然后在你的测试中:
val mockedUtils = mock[UtilityMethods]

(使用模拟)。显然,您必须在代码周围传递 UtilityMethods 而不是 Utils,就像在 Java 中使用接口(interface)一样。

一般来说,您也可以使用隐式作用域来注入(inject)函数,从而在没有类似静态对象的方法的情况下模拟这些依赖项,但上面的内容非常接近 Java 模式,应该感觉很舒服。

关于scala - 模拟 Scala 对象和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43475907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com