scala-单元测试-如何在类中模拟类方法
我在Scala中有一个类,如下所示:scala-单元测试-如何在类中模拟类方法,scala,unit-testing,mockito,Scala,Unit Testing,Mockito,我在Scala中有一个类,如下所示: class A { private val b = new B() def doSomething() { b.someMethod(); } } val b = mock[B] when(b.someMethod()).thenReturn(xx) val class_to_test = new A() class_to_test.doSomething() 如何进行单元测试doSomething()?如何在此处模拟b 我试过这样
class A {
private val b = new B()
def doSomething() {
b.someMethod();
}
}
val b = mock[B]
when(b.someMethod()).thenReturn(xx)
val class_to_test = new A()
class_to_test.doSomething()
如何进行单元测试doSomething()
?如何在此处模拟b
我试过这样的方法:
class A {
private val b = new B()
def doSomething() {
b.someMethod();
}
}
val b = mock[B]
when(b.someMethod()).thenReturn(xx)
val class_to_test = new A()
class_to_test.doSomething()
我正在使用Mockito和MockitoSugar。上一个代码片段的问题是
val b=mock[b]
与类的b
字段是不同的变量。您可以通过修改类将b
作为可选参数来解决此问题:
class A(b: B = new B) {
def doSomething(): Unit = {
b.someMethod()
}
}
现在,您的测试变成:
val b = mock[B]
when(b.someMethod()).thenReturn(xx)
val classToTest = new A(b)
classToTest.doSomething()
这种技术称为依赖注入。您可以在此处阅读更多信息:
如果不想将
b
公开为公共构造函数参数,可以使用包私有构造函数与提供默认值b
的公共构造函数或工厂方法结合使用:
class A private[myPackage](b: B) {
def this() = this(new B) // The public constructor doesn't expose b.
def doSomething(): Unit = {
b.someMethod()
}
}
然后确保您的测试在同一个包中,这样他们仍然可以调用采用
b
的构造函数。为什么您的方法不起作用?我找不到将模拟b传递给classToTest的方法。谢谢您的回复。两种解决方案都有效!我不能否决这个解决方案,因为我是个新手