Java 如何将模拟类传递给扩展类';Scala中的父构造函数是什么?
我必须在一些现有代码中添加一些功能,如Java 如何将模拟类传递给扩展类';Scala中的父构造函数是什么?,java,scala,mockito,Java,Scala,Mockito,我必须在一些现有代码中添加一些功能,如 class A(foo: Foo, bar: Bar) { // stuff def aMethod(){ // some setup bMethod() } private def bMethod() { // do some stuff } } class ATest() {
class A(foo: Foo, bar: Bar) {
// stuff
def aMethod(){
// some setup
bMethod()
}
private def bMethod() {
// do some stuff
}
}
class ATest() {
val mockA = new ExtendsA(instance, foo, bar)
val results = mockA.aMethod()
// validate some stuff
}
class ExtendsA(instance: Instance, foo: Foo, bar: Bar) extends A(foo: Foo, bar: Bar) {
// override some stuff
}
我添加了一些必须在bMethod()期间执行的功能。这需要访问不受代码控制且在调试期间无法正确设置的数据,因此将其放入新类并模拟
class MoreFunctionality() {}
class A(foo: Foo, bar: Bar, moreFunctionality : MoreFunctionality = new MoreFunctionality()) {
// stuff
def aMethod(){
// some setup
bMethod()
}
private def bMethod() {
moreFunctionality.doNewStuff()
// do some stuff
}
}
class ATest() {
val mockMoreFunctionality = mock[MoreFunctionality]
doNothing().when(mockMoreFunctionality).doNewStuff()
val mockA = new ExtendsA(instance, foo, bar, mockMoreFunctionality)
val results = mockA.aMethod()
// validate some stuff
}
class ExtendsA(instance: Instance, foo: Foo, bar: Bar, mockMoreFunctionality: MoreFunctionality) extends A(foo, bar, mockMoreFunctionality) {
// override some stuff
}
我遇到的问题是,我尝试的一切似乎都忽略了MoreFunctional类已被模拟的事实,并试图使用实际的方法。我已经使用mockingDetails(obj).isMock()测试了该实例实际上是一个mock,它确实是
我还尝试重新安排它,使方法本身接受新类作为参数,但这也不起作用
class MoreFunctionality() {}
class A(foo: Foo, bar: Bar) {
// stuff
def aMethod(moreFunctionality: MoreFunctionality){
// some setup
bMethod(moreFunctionality)
}
private def bMethod(moreFunctionality: MoreFunctionality) {
moreFunctionality.doNewStuff()
// do some stuff
}
}
class ATest() {
val mockMoreFunctionality = mock[MoreFunctionality]
doNothing().when(mockMoreFunctionality).doNewStuff()
val mockA = new ExtendsA(instance, foo, bar)
val results = mockA.aMethod(mockMoreFunctionality)
// validate some stuff
}
class ExtendsA(instance: Instance, foo: Foo, bar: Bar) extends A(foo, bar)
{
// override some stuff
}
这里有我遗漏的东西吗?doNewStuff的真正方法是否接受任何参数?如果是的话,你是怎么做的?另外,你不应该在模拟上使用
doNothing
,模拟默认情况下什么都不做,代码是用来覆盖spysSo上的行为的,我们最终解决了这个问题。问题是,扩展类A的类将类A的实例作为参数。该实例是一个模拟实例,正在从那里调用所使用的方法。因此,当我们在ExtendDSA中添加MockMore功能时,测试使用的是来自A的模拟的非模拟值。这一切都非常混乱,很可能设计得不好,但我们必须使添加的内容与存在的内容一起工作。