当前位置: 首页 > 知识库问答 >
问题:

如何正确地模拟 UriInfo?

孟安民
2023-03-14

这是我的代码:

import java.net.URI;
import javax.ws.rs.core.UriInfo;
(...)

    UriInfo mockUriInfo;
    String url = "test";

    mockUriInfo = mock(UriInfo.class);
    when(mockUriInfo.getRequestUri()).then(new URI(url));

不幸的是,我有一个错误:

then(org.mockito.stubbing.Answer) cannot be applied to (java.new URI)

知道我该如何解决它吗?

共有2个答案

李昱
2023-03-14

真的,99%的时候都是错的。相反,使用真实对象或使用集成测试(使用RESTAssured或其他东西)会更好。

在mockito wiki上:不要模仿你不拥有的类型!

这不是一条强硬的线,但越过这条线可能会产生影响!(它很可能会。

    < li >想象一下模仿第三方库的代码。在第三个库的特定升级之后,逻辑可能会有一点改变,但是测试套件会执行得很好,因为它被模仿了。所以后来,认为一切都准备好了,构建墙毕竟是绿色的,软件被部署...嘣 < li >这可能表明当前设计与第三方库的分离度不够。 < li >另一个问题是,第三方库可能很复杂,甚至需要大量模拟才能正常工作。这导致了过度指定的测试和复杂的装置,这本身就损害了紧凑和可读的目标。或者由于模拟外部系统的复杂性而没有充分覆盖代码的测试。

相反,最常见的方法是围绕外部库/系统创建包装器,尽管人们应该意识到抽象泄漏的风险,其中太多的低级API、概念或异常超出了包装器的边界。为了验证与第三方库的集成,编写集成测试,并使它们尽可能紧凑和可读。

通建安
2023-03-14

您需要使用thenReturn,而不是:

when(mockUriInfo.getRequestUri()).thenReturn(new URI(url));

如果你想使用那么(这是thenAnswer的同义词,你需要传递一个答案作为参数:

when(mockUriInfo.getRequestUri()).then(new Answer<Integer>() {
    public URI answer(InvocationOnMock invocation) throws Throwable {
        return new URI(url);
    }
}
 类似资料:
  • org.mockito.exceptions.misusing.invaliduseofmatchersexception:在此处检测到错误的参数匹配器:->at service.activity.service.activitesServiceTest.setup(activitesServiceTest.java:45) 不能在验证或短截之外使用参数匹配器。参数匹配器的正确用法示例:when(

  • 单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本文主要对几种单例写法的整理,并分析其优缺点。很多都是一些老生常谈的问题,但如果你不知道如何创建一个线程安全的单例,不知道什么是双检锁,那这篇文章可能会帮助到你。 懒汉式,线程不安全 当被问到要实现一个单例模式时,很多人的第一反应是写出如下的代码,包括教科书上也是这样教我们的。 public

  • 对于类中的方法,文档是这样说的: 取消此对话框,将其从屏幕上移除。可以从任何线程安全地调用此方法。请注意,当对话框被取消时,不应重写此方法来进行清理,而应在中实现此方法。 在我的代码中,我所做的就是调用来删除它。但是我没有做其他任何事情,甚至没有使用。因此,我问的是如何正确地删除以避免任何内存泄漏等。

  • 问题内容: 我对ObjectMapper的工作方式和应用程序的一般使用感到满意。我想了解的是实现ObjectMapper的最佳方法,以确保其被重用并且不会在应用程序内创建不必要的实例? 我的想法是,可以在Utils类中声明ObjectMapper,如下所示: 然后,我可以在不同的地方使用诸如以下代码来引用: 我遇到了另一个问题(我应该将杰克逊的ObjectMapper声明为静态字段吗?),这促使我

  • 问题内容: 在尝试学习TDD的过程中,尝试学习单元测试并在python中使用模拟。慢慢掌握它,但不确定我是否正确执行此操作。预先警告:由于供应商API是预编译的2.4 pyc文件,因此我正在使用python 2.4进行卡住,因此我正在使用模拟0.8.0和unittest(不是unittest2) 在“ mymodule.py”中给出此示例代码 现在在我的测试用例文件“ test_myclass.p

  • 我有下面的打字稿类,我想测试在笑话。 这是我的测试: 如何模拟MyClass中使用的foo函数,以使测试通过?

  • 问题内容: 我有一个复选框,可以切换某些行为,但是如果有人连续点击100次,我不想向服务器端发送100个请求。 到目前为止,这就是我所准备的(找到以下代码片段): 在我的文档准备功能中: 然后事件本身: 这是因为我将1500毫秒作为去抖动周期,所以如果您在1500毫秒内单击n次,它将仅向服务器发送最新状态。 但是,使用它会有副作用,现在我的其他事件的click事件被搞砸了。我在这里做错什么了吗?有

  • 我发现其他人也有同样的问题,他们的问题通过在InputStreamReader构造函数中指定UTF-8来解决: 以UTF-8形式读取InputStream 这对我不起作用,我也不知道为什么。无论我尝试什么,我总是得到转义的unicode值(斜杠-U+十六进制),而不是实际的语言字符。我在这里做错了什么?提前道谢! 请注意:这不是字体问题。我之所以知道这一点,是因为如果我对同一个文件使用Resour