如何通过PowerMock访问以下私有静态字段foo。我只想验证Foo例如不是null,我不能通过添加getter来重构代码。
public class Bar{
private static Foo foo = new Foo();
}
我尝试使用它,但它不起作用:
Foo foo = Whitebox.getInternalState(bar, "foo");
答案 0 :(得分:2)
Whitebox.getInternalState(Foo.class, "FIELD_NAME");
答案 1 :(得分:1)
你可以使用Spring的ReflectionTestUtils.getField():
Foo foo = ReflectionTestUtils.getField(Bar.class, "foo");
答案 2 :(得分:1)
验证私有字段是否具有某些内容转换为:测试内部实现详细信息。当然,这是可能的,但它也使您的测试非常脆弱 - 对生产代码稍作修改(如:重构),并且您的测试失败;虽然您可能没有更改正在测试的班级的合同。
你知道 - 我很确定某种程度上会在你测试的类中产生影响,如果该字段为null或不是。含义:对于这两种情况,您所测试的类的某些行为会有所不同。
因此我建议:看看你是否可以在这里避免使用Powermock - 通过找到其他方法来“断言”生产类中的某些内容来测试该字段是否为空。
说真的:如果该字段的内容不影响正在测试的类的任何可观察行为 - 首先该字段的目的是什么?!