我有一个旧类,其中包含一个new()调用以实例化LoginContext():

public class TestedClass {
  public LoginContext login(String user, String password) {
    LoginContext lc = new LoginContext("login", callbackHandler);
  }
}

我想使用Mockito测试该类来模拟LoginContext,因为它要求在实例化之前设置JAAS安全性,但是我不确定如何在不更改login()方法以外部化LoginContext的情况下进行此操作。是否可以使用Mockito模拟LoginContext类?

最佳答案

对于将来,我会推荐Eran Harel's answer(将new重构为可以模拟的工厂)。但是,如果您不想更改原始源代码,请使用非常方便且独特的功能: spy 。从documentation:

在您的情况下,您应该写:

TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);

09-11 18:58