在@SpringBootTest中测试@Async注释的方法

2024-03-30

我有一个服务 SomeService,它有一种方法来执行一些逻辑。

@Override
public CompletableFuture<Boolean> process(User user) {
    Objects.requiredNonNull(user, "user must not be null");
    // other logic...
}

然后我对此进行了测试。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { SomeService.class })
public class SomeServiceTest {
    @Autowired private SomeService tested;
    @Test
    public void user_null_expect_NullPointerException() {
        assertThatThrownBy(() -> tested.process(null))
                .isInstanceOf(NullPointerException.class)
                .hasMessage("user must not be null");
    }
}

它工作得很好,直到我决定使该方法异步。

@Async
@Override
public CompletableFuture<Boolean> process(User user) {
    Objects.requiredNonNull(user, "user must not be null");
    // other logic...
}

所以,现在由于 Spring 代理,它不起作用。 有谁知道我必须如何配置我的测试才能使其再次工作?


好的,我有一个解决方案。问题不在于异步方法,问题在于错误的断言。我不知道 AssertJ 能够测试 CompletableFuture。

所以我的解决方案是这样的:

@Test
public void user_null_expect_NullPointerException() {
    final CompletableFuture<Boolean> result = getCompletedResult(null);

    assertThat(result)
            .isCompletedExceptionally()
            .hasFailedWithThrowableThat()
            .isInstanceOf(NullPointerException.class)
            .hasMessage("user must not be null");
}

private CompletableFuture<Boolean> getCompletedResult(User user) {
    final CompletableFuture<Boolean> result = tested.process(user);
    await().atMost(10, TimeUnit.SECONDS).until(result::isDone);
    return result;
}

如果您有更好的解决方案,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在@SpringBootTest中测试@Async注释的方法 的相关文章

  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统

    我对一般指标尤其是微米很陌生 所以这可能是一个愚蠢的问题 千分尺在其上描述了自己主页 https micrometer io 作为 外观 没有供应商锁定 想想 SLF4J 但为了指标 具有 对 Netflix Atlas 的内置支持 这do
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • python 模拟第三方模块

    我正在尝试测试一些处理推文的类 我使用 Sixohsix twitter 来处理 Twitter API 我有一个类充当 Twitter 类的外观 我的想法是模拟实际的 Sixohsix 类 通过随机生成新推文或从数据库检索它们来模拟推文的
  • 主线程如何在该线程之前运行?

    我有以下代码 public class Derived implements Runnable private int num public synchronized void setA int num try Thread sleep 1
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • 任务并行库周围是否有一个接口包装器,以便我可以将其交换用于单元测试?

    I asked 这个问题 https stackoverflow com questions 3362734 unit testing concurrent software what do you do不久以前 我现在知道这是一个坏主意
  • 在 Spring Boot Actuator 健康检查 API 中启用日志记录

    我正在使用 Spring boot Actuator APIproject https imobilenumbertracker com 拥有一个健康检查端点 并通过以下方式启用它 management endpoints web base
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java:多线程内的 XA 事务传播

    我如何使用事务管理器 例如Bitronix http docs codehaus org display BTM Home JBoss TS http www jboss org jbosstm or Atomikos http www a
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项

随机推荐

  • 两个程序集中具有相同名称的类(故意)

    我正在迁移一个用 C 编写并具有 C 包装器的库 C 包装器 LibWrapper 有一组带有命名空间的类 例如 namespace MyNamespace class MyClass class MyOtherClass 我的新图书馆 L
  • 从 JQuery 元素获取 html DOM 元素

    下面的代码给了我 JQuery 对象 其中包括与之关联的 JQuery 函数 var element element 但是如何从上面的 JQuery 对象中获取 HTML DOM 元素呢 从 jQuery 对象中获取第一项 var elem
  • 如何匹配 Coq 中的特定值?

    我正在尝试实现一个函数 该函数可以简单地计算包中某些 nat 的出现次数 只是列表的同义词 这就是我想做的 但它不起作用 Require Import Coq Lists List Import ListNotations Definiti
  • python:防止丢弃函数返回值

    代码中有一个常见错误 人们会这样写 if id query filter row id id 代替 if id query query filter row id id 该代码看起来 有效 并且很难用手识别它们 在 C 中有 nodisca
  • CSS 上的 base64,iVBORw0K.... 是什么? [复制]

    这个问题在这里已经有答案了 我是一个非常新的学习者 我正在学习 php mysql 和 css 我正在阅读许多源代码来了解真正的程序员是如何工作的 在一个网站上 我看到一个源代码 其中有人在 css 上写了以下行 background ur
  • 使用条形码阅读器防止在 Chrome 中打开下载窗口

    我的网站 MVC3 C 和条形码阅读器有这个问题 在我的表格中 我有这样的内容
  • Typescript 类型和 .bind

    我开始深入研究泛型并拥有一个如下所示的通用事件类 export interface Listener lt T gt event T any export class EventTyped lt T gt Array of listener
  • CommonJS 规范中概述的 Define() 协议给我带来了什么?

    我明白事情是怎样的正确的名称间距 https stackoverflow com questions 881515 javascript namespace declaration和模块模式 http www adequatelygood
  • 如何在 JQuery $.each 函数中编辑全局变量?

    好吧 所以这个标题可能不能很好地解释我的问题 希望这是有道理的 这也是我第一个使用 jQuery 的应用程序 所以如果我做了一些愚蠢的事情 请原谅我 我有以下功能 function getRandomImages limit imagesA
  • SQL Server 2005 中“创建用户”所需的权限?

    我正在尝试从我的应用程序中创建 SQL Server 登录名和数据库用户 以及自定义应用程序用户行 我希望这些用户能够创建其他用户 即应用程序将控制谁可以 不能创建用户 但我需要所有用户都具有创建 SQL Server 登录名和数据库用户的
  • 使用 sudo:false 在 Travis-ci 上安装软件包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何使用 travis yml 中的 sudo false 在 Travis ci 上安装软件包 我有我的 travis yml sudo
  • 使用 CoreBluetooth CBL2CAPChannel 移动数据

    我已经设置了一些数据传输功能 使用CoreBluetooth CBL2CAPChannel in a Swift iOS应用程序 这是发送数据的函数 func sendData outStream OutputStream gt Bool
  • Pyspark DF:如何添加文字空字典“{}”列

    我有 json 文件 其中每一行都是一个 json 对象 其中包含多个字符串和一个字典 str a blah str b blah dict obj 字典对象通常是 dict obj 偶尔包含值 并且很少会从所有 json 行中丢失 例如
  • ng-reflect-model 显示正确的值但未反映在输入中

    遇到一个非常奇怪的问题 我的应用程序在非常特定的用户案例中行为不当 我有一个门户 用户可以在其中添加问题和答案 然后进行编辑 在这种情况下 当我删除一个集合 q a 然后尝试添加它时 模型正在更新 但我的视图从占位符中获取值并自行更新 这里
  • 使用 opencv 调整视频大小并保存

    我正在尝试使用 opencv 重新调整视频大小 然后将其保存回我的系统 代码有效并且不会给出任何错误 但输出视频文件已损坏 我使用的 fourcc 是 mp4v 与 mp4 配合良好 但输出视频仍然损坏 需要帮忙 import numpy
  • 我可以阻止 Blazor 中的导航吗?

    在 Blazor 服务器端应用程序中 是否涉及一些执行实际导航的 javascript 例如当用户点击链接时 我的意思是像window history pushState 理论上是否可以覆盖该 javascript 以防止在某些情况下 当页
  • 当文本发生变化并满足一定条件时更改文本框的前景色

    当文本框中的文本发生变化并满足特定条件时 我需要设置文本颜色 我可以从代码后面实现这个文本框 文本已更改事件和设置笔刷颜色到所需的颜色 但我无法使用 xaml wpf 方法来实现这一点 我是 wpf 新手 我不确定当文本框中的文本更改时如何
  • 如何在 ASP.NET MVC 5 中实现自定义身份验证

    我正在开发 ASP NET MVC 5 应用程序 我有一个现有的数据库 我从中创建了 ADO NET 实体数据模型 我在该数据库中有一个表 其中包含 用户名 和 密码 列 我想使用它们在我的 Web 应用程序中实现身份验证和授权 由于客户的
  • 如何将对齐按钮添加到 Quill 的工具栏?

    我正在尝试将对齐按钮添加到 Quill 编辑器工具栏 工具栏文档 https quilljs com docs modules toolbar 不是很详细 它展示了如何选择对齐选项 但我想要一组并排的切换按钮 这可能吗 你可以做align
  • 在@SpringBootTest中测试@Async注释的方法

    我有一个服务 SomeService 它有一种方法来执行一些逻辑 Override public CompletableFuture