在方法中设置私有var和读取值

时间:2014-08-04 12:52:14

标签: java testing groovy spock

我正在尝试在我的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对象,因为它连接到数据库而我不想使用它。

2 个答案:

答案 0 :(得分:1)

由于Template实例是模拟,并且您没有对getMessage()方法进行存根,它将返回null。这是模拟对象的默认行为。永远不会调用实际getMessage()方法中的代码。您必须存根方法以返回您想要的内容。您可以以调用实际代码的方式存根它,但这取决于您使用的模拟框架。

答案 1 :(得分:0)

我不太确定(我从未使用过Groovy),但这可能是因为你没有为finalMessage分配任何值。我认为它应该是private String finalMessage = //The string。但正如我所说,我不知道Groovy,所以,正如Priyesh所说,它可能是Groovy中的一个错误......