将HashSet的新实例分配给模拟类的私有字段是主要问题。在模拟类中,我尝试为私有字段分配新值。结果,我做了以下实施;然而,似乎反思不适用于模拟类。因此,如何使用Powermockito将新值分配给模拟类的私有字段?
我的实施
class Foo{
private volatile Set<String> field;
}
带反射
Foo mock = mock(Foo.class);
try{
Field refField = mock.getClass().getDeclaredField("field");
...
}catch( ... ) {
}
getDeclaredField抛出&#34; NoSuchFieldException&#34;的异常。
我的目标是,如果没有抛出异常;
refField.set(mock, new HashSet<String>());
答案 0 :(得分:0)
我找到了解决问题的方法。有趣但有效。
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) {
....
}
在提出这个问题之后,one link来自右侧,作为建议,引起了我的兴趣。在看了那个问题后我找到了答案,有点灵感。