我正在尝试在我的Spock测试中在类中设置私有变量,并在类方法中读取此值,但它不起作用。
模板类
public class Template {
private String finalMessage;
public String getMessage() {
return finalMessage;
}
TemplateTest.groovy
given: "A template"
Template template = Mock()
when: "setting field"
String templ = "<APP/>aaaa";
Field f2 = Template.class.getDeclaredField("finalMessage");
f2.setAccessible(true);
f2.set(template ,templ);
then: "tags set contains all tags"
System.out.println(f2.get(template));
System.out.println(template.getMessage());
输出
<APP/>aaaa
null
我正在模拟这个Template对象,因为它连接到数据库而我不想使用它。
答案 0 :(得分:1)
由于Template
实例是模拟,并且您没有对getMessage()
方法进行存根,它将返回null
。这是模拟对象的默认行为。永远不会调用实际getMessage()
方法中的代码。您必须存根方法以返回您想要的内容。您可以以调用实际代码的方式存根它,但这取决于您使用的模拟框架。
答案 1 :(得分:0)
我不太确定(我从未使用过Groovy),但这可能是因为你没有为finalMessage
分配任何值。我认为它应该是private String finalMessage = //The string
。但正如我所说,我不知道Groovy,所以,正如Priyesh所说,它可能是Groovy中的一个错误......