我有一个旧类,其中包含一个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);