测试孩子时模拟父类行为(受保护的方法)

时间:2018-10-23 14:01:05

标签: unit-testing testing groovy spock

我正在使用 Spock 对我刚刚加入的项目进行单元测试。但是,编写Java代码测试存在问题。

class Parent {
   private SomeObject obj;
   public SomeObject getSomeObject() {return obj;}
   public void setSomeObject(final SomeObject obj) {this.obj = obj}
}

// THIS IS THE CLASS I AM TESTING
class Child extends Parent {
   public String doSth() {
       getSomeObject().dosomethingontheobject()  // This line causes problem
   }    
}

这是我正在使用的测试方法

def 'test'() {
   given:
   SomeObject obj = Mock()
   obj.dosomethingontheobject() >> [somethin1, somethin2]

   Child child = new Child()
   child.setSomeObject(obj)

   when:
   child.doSth()

   then:
   1 * obj.dosomethingontheobject()
}

在运行时,我因调用“ dosomethingonobject()”方法而收到“调用次数太少”的错误。

1 个答案:

答案 0 :(得分:1)

它将以这种方式工作:

def 'test'() {
   given:
   SomeObject obj = Mock()

   Child child = new Child()
   child.setSomeObject(obj)

   when:
   child.doSth()

   then:
   1 * obj.dosomethingontheobject() >> [somethin1, somethin2]
}

也:

public void getSomeObject() {return obj;}

voidreturn? ;)