为模拟类的私有字段赋新值



将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) {
      ....
}

问完这个问题,右边的一个链接,作为建议,引起了我的兴趣。看了那个问题我找到了答案,有点灵感。

相关内容

  • 没有找到相关文章

最新更新