我在 scala 中有一个静态方法,静态方法我的意思是说这个方法在一个名为 MyObject 的对象中。我还有一个名为 MyClass 的类,其中有一个方法在内部调用 MyObject 的方法。我想为 MyClass 编写单元测试并想模拟 MyObject 的方法。我怎样才能在 Scala 中做到这一点?
class MyClass {
def callMyObject(): String = MyObject.myMethod()
}
object MyObject {
def myMethod(): String = "Original method"
}
我希望当我调用 MyClass 的 callMyObject() 时它应该返回一个模拟值而不是“原始方法”
我正在尝试 mockStatic 和间谍但没有帮助。
此代码需要进行一些重构以使其可测试。
首先,使
MyObject
扩展一个特征。比方说MyGenericObject
.
trait MyGenericObject {
def sayMyName: Unit
}
object MyObject extends MyGenericObject{
def sayMyName: Unit = println("foo bar")
}
然后重构
MyClass
以接受myObj: MyGenericObject
.
class MyClass(myObj: MyGenericObject) {
def saySomeonesName: Unit = myObj.sayMyName
}
现在进行测试
MyClass
,您可以创建一个新对象MyTestObject
,它将扩展MyGenericObject
,以便我们可以将它传递给MyClass
.
object MyTestObject extends MyGenericObject {
def sayMyName: Unit = println("test bar")
}
现在进行测试。
val myClass = new MyClass(MyObject)
myClass.saySomeonesName
// Output: foo bar
val myTestClass = new MyClass(MyTestObject)
myTestClass.saySomeonesName
// Output: test bar