【问题标题】:Mock parent class behaviour (protected method) when testing child测试孩子时模拟父类行为(受保护的方法)
【发布时间】:2018-10-23 14:01:05
【问题描述】:

我正在使用 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()”方法时出现“调用太少”错误。

【问题讨论】:

  • 你能发帖minimal reproducible example吗?我试图重现您的问题 - ParentChildSomeObject 作为 Java 类,Spock 测试复制粘贴(somethin1somethin2 替换为一些随机字符串)并按预期通过测试。跨度>

标签: unit-testing testing groovy spock


【解决方案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? ;)

【讨论】:

  • @Chlebik,当然。它发生了。你会在问题中纠正它吗?
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2013-10-10
  • 2012-01-08
  • 1970-01-01
  • 2012-07-24
  • 2018-11-21
相关资源
最近更新 更多