Java 使用Mockito通过new()调用测试类
我有一个旧类,其中包含用于实例化LoginContext()的new()调用:
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)的答案(将new
工厂搬迁到可以嘲笑的工厂)。但是,如果你不想更改原始源代码,请使用非常方便且独特的功能:spies。从文档中:
你可以创建真实对象的间谍。当你使用间谍时,将调用实际方法(除非对方法进行了加注)。
真正的间谍应该小心谨慎地使用,例如在处理遗留代码时。
在你的情况下,你应该写:
TestedClass tc = spy(new TestedClass());LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);
以上是 Java 使用Mockito通过new()调用测试类 的全部内容, 来源链接: utcz.com/qa/425851.html