当前位置: 首页 > 面试题库 >

Java 使用Mockito通过new()调用测试类

邹海超
2023-03-14
问题内容

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


 类似资料:
  • 我有以下代码 我对嘲笑不熟悉。我有以下疑问。我正在尝试测试公共方法。 我是否可以断言私有变量workDone的值? 是否可以验证超类中的方法调用? 如何在方法中模拟私有方法调用?

  • 问题内容: 我想测试一个抽象类。当然,我可以手动编写一个从类继承的模拟。 我可以使用模拟框架(我正在使用Mockito)来执行此操作,而不是手工制作模拟吗?怎么样? 问题答案: 以下建议让你在不创建“真实”子类的情况下测试抽象类-Mock 是子类。 使用,然后模拟所有被调用的抽象方法。 例: 注意:此方法的好处是,你不具备实现的抽象方法,只要他们永远不会被调用。 在我看来,这比使用间谍更整洁,因为

  • 问题内容: 这是从这个问题开始的:要求我在哪里开始一个新的问题。 问题是我只是对JUnit 或有关的东西之类的东西还不够了解,无法用Jeff Bowman提到的方式解决问题。 问题答案: 在您以后的评论中,我指出了差距:您需要使用Mockito作为规则,而将参数化为Runner,而不是相反。 原因是Runner负责报告测试数量,而Parameterized则根据测试方法的数量和参数化输入的数量来操

  • 我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。

  • null 但是得到了一个错误-,尽管方法签名包括throws Exception。 就像这样- https://www.baeldung.com/mockito-exceptions**如何测试某个函数没有被调用?**如何验证某个特定方法不是使用Mockito调用的?**mockito测试用0个调用验证

  • 我有一个测试类的问题。 在我的ParkingSpotService类中,有一个UUID找到的方法,我想为此编写一个测试: 我做了什么?我创建了一个TestClass ParkingSpotServiceTest: } 在我创建了一个测试之后 观察: 当我检查optionalParkingSpot时,所有数据都在那里。