Java中接口的模拟静态方法

Java中接口的模拟静态方法,java,unit-testing,mocking,Java,Unit Testing,Mocking,我得到了一个带有静态方法的接口。我想在单元测试中模拟这种方法。 以下是此类接口的一个示例: public interface IClass { static String create(String s) { System.out.println("Method create is called"); return s; } } 我试图使用PowerMockito模拟此方法: @RunWith(PowerMockRunner.class) @PrepareForTest

我得到了一个带有静态方法的接口。我想在单元测试中模拟这种方法。 以下是此类接口的一个示例:

public interface IClass {
  static String create(String s) {
    System.out.println("Method create is called");
    return s;
  }
}
我试图使用
PowerMockito
模拟此方法:

@RunWith(PowerMockRunner.class)
@PrepareForTest(IClass.class)
public class IClassTest {

  @Before
  public void setUp() {
    PowerMockito.mockStatic(IClass.class);
    ClassImpl cl = mock(ClassImpl.class);
    Mockito.when(IClass.create(any())).thenReturn(cl);
  }

  @Test
  public void mockInterfaceClassTest() {
    System.out.println(IClass.create("Test"));
  }
}
不幸的是,没有进行模拟,甚至更多,只要在我的
setUp()
方法中我尝试设置模拟:
Mockito.when(icclass.create(any())。然后返回(cl)实际上,正在调用该方法(我在控制台中得到消息“methodcreate is called”),这肯定是不希望的


是否有可能在接口中模拟静态方法?

如何在接口中定义方法?接口方法始终在实现接口的类中重写。在接口内定义方法是非法的——这是我所知道的。@ProgyadeepMoulik,在Java8之前是这样的……没有一种合理的方法来做到这一点。你可以通过截取AspectJ或类似的调用来“模仿”它,但我想说的是,不尝试做这样的事情要省力得多。@TeemuIlmonen,我别无选择,因为它是第三方库的一部分。如果是我的代码…它应该可以与JMockit一起工作:只需声明一个
@Mocked IClass mock
字段,并在静态方法上记录所需的期望值。