为什么可以在Spock中测试私有方法/字段而不会出现问题?

时间:2014-10-20 11:49:24

标签: unit-testing methods field private spock

package com.example.dev;
public class AClass {
 private Integer a =10;
...//other code
}

当我尝试在我的Spock方法中访问时:

package com.example.dev;
def 'test a'() {
 AClass aClassVar = new AClass()
 aClassVar.a = new Integer(100);
...//other testing stuff
}

工作正常。为什么会这样? Spock是否使用反射来访问私有字段?或者我的封装不好写?

2 个答案:

答案 0 :(得分:4)

Spock并不感到愧疚,它本身就很常见,请看:Private method in groovy is not private

虽然可以引用私人班级成员,但这绝对不是一个好习惯。

答案 1 :(得分:-1)

我理解

aClassVar.a = new Integer(100)

在Groovy / Spock中只是

的语法糖
aClassVar.setA(new Integer(100));
在Java中

。在某些情况下,我试图这样做,并且WASN'一个二传手和Spock抱怨。

至于为什么我们创建私有属性然后给他们设置者,这是另一个讨论。