PowerMock访问私有静态成员

8
我该如何通过PowerMock访问以下私有静态字段foo?我只想验证例如Foo不为空,而我不能通过添加getter来重构代码。
public class Bar{

   private static Foo foo = new Foo();


}

我试着使用这个,但它不起作用:
Foo foo = Whitebox.getInternalState(bar, "foo");

6
尝试使用Whitebox.getInternalState(Bar.class, "foo") - Tavian Barnes
它可以工作。非常感谢。 - Daoud Shaheen
我注意到您还没有接受任何答案。请考虑在某个时候这样做。 - GhostCat
3个回答

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

1
验证私有字段是否具有某些内容意味着测试内部实现细节。当然,这是可能的,但它也会使您的测试非常脆弱——稍微更改(例如:重构)生产代码,您的测试就会失败;尽管您可能没有更改正在测试的类的契约

而且,我很确定,如果该字段为空或不为空,它在您要测试的类中某种程度上会有所区别。也就是说:对于这两种情况,您要测试的类的某些行为将不同。

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

说真的:如果该字段的内容不影响您要测试的类的任何可观察行为——那么,该字段的目的是什么?!


0

2
OP的问题与Spring毫无关系。 - Nikolas Charalambidis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接