PowerMock访问私有静态成员

时间:2016-09-17 17:36:55

标签: java junit mockito powermock

如何通过PowerMock访问以下私有静态字段foo。我只想验证Foo例如不是null,我不能通过添加getter来重构代码。

public class Bar{

   private static Foo foo = new Foo();


}

我尝试使用它,但它不起作用:

Foo foo = Whitebox.getInternalState(bar, "foo");

3 个答案:

答案 0 :(得分:2)

Whitebox.getInternalState(Foo.class, "FIELD_NAME");

答案 1 :(得分:1)

你可以使用Spring的ReflectionTestUtils.getField()

Foo foo = ReflectionTestUtils.getField(Bar.class, "foo");

答案 2 :(得分:1)

验证私有字段是否具有某些内容转换为:测试内部实现详细信息。当然,这是可能的,但它也使您的测试非常脆弱 - 对生产代码稍作修改(如:重构),并且您的测试失败;虽然您可能没有更改正在测试的班级的合同

你知道 - 我很确定某种程度上会在你测试的类中产生影响,如果该字段为null或不是。含义:对于这两种情况,您所测试的类的某些行为会有所不同。

因此我建议:看看你是否可以在这里避免使用Powermock - 通过找到其他方法来“断言”生产类中的某些内容来测试该字段是否为空。

说真的:如果该字段的内容不影响正在测试的类的任何可观察行为 - 首先该字段的目的是什么?!