将HashSet的新实例分配给模拟类的私有字段是主要问题。在模拟类中,我尝试将新值分配给私有字段。因此,我做了下面的实现;然而,似乎反思是不工作的嘲笑类。因此,我怎么能分配新的值,以模拟类的私人领域与Powermockito?
my implementation
class Foo{
private volatile Set<String> field;
}
与反射 Foo mock = mock(Foo.class);
try{
Field refField = mock.getClass().getDeclaredField("field");
...
}catch( ... ) {
}
getDeclaredField抛出"NoSuchFieldException"异常。
我的目标是,在不抛出异常的情况下;
refField.set(mock, new HashSet<String>());
我已经找到解决它的方法了。很有趣,但是有用。
Foo fooInstance = new Foo();
try {
whenNew(Foo.class).withAnyArguments().then(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Field reflected = invocation.getClass().getDeclaredField("field");
reflected.setAccessible(true);
reflected.set(fooInstance, (new HashSet<String>()));
return null;
}
});
} catch (Exception e) {
....
}
问完这个问题,右边的一个链接,作为建议,引起了我的兴趣。看了那个问题我找到了答案,有点灵感。