@Value 变量在使用 @TestPropertySource 的单元测试中为 NULL

2024-01-10

在下面的单元测试中,我手动提供属性并尝试从现有的 YAML 资源文件中读取它们(尝试了不同的策略)@TestPropertySource), the @Value{..}属性未设置,我总是为它们获取 NULL:

@SpringBootConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(properties = {
        "eligible_filename = xyz"
})
@ExtendWith(MockitoExtension.class)
public class AppServiceTest {
    
    @Value("${eligible_filename}") // This var is always NULL

@SpringBootConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource(properties = "application-test.yaml") /* File exists, also tried resources/application-test.yaml */
@ExtendWith(MockitoExtension.class)
public class AppServiceTest {
    
    @Value("${eligible_filename}") // This var is always NULL

这就是我最终决定的。我们must use @SpringBootTest加载测试属性(application-test.yaml)并得到@Value(..),但不幸的是这会导致整个应用程序运行。要屏蔽正在使用的真实对象并替换模拟对象,我们可以使用@SpringBootTest with @Import(SomeConfiguration.class)如下。这将使模拟对象在运行时被拾取@SpringBootTest test:

@SpringBootTest
@Import(value = {MockAppServiceConfiguration.class, 
                 MockEmailServiceConfiguration.class}) // etc. any other mocked objects
public class MyTest {
}

模拟服务配置示例:

public class MockEmailServiceConfiguration {
    
    // Replace with mock EmailService when running full-application @SpringBootTest tests
    @Bean
    public EmailService emailService(){
        return new EmailService() {
           //... Override any service methods with a mock result (no real processing)
        }

现在您可以运行测试,而无需连接真实的对象。但由于我们仍然需要对实际的服务类进行单元测试,因此我手动创建自己的 Service 对象并对其进行 Mockito 测试openMocks / @Mock / @InjectMocks)。这是测试实际服务类的第 2 部分:

@SpringBootTest
@Import(value = {MockAr11ApplicationServiceConfiguration.class, /* Prevent the loading of the real Ar11ApplicationService during @SpringBootTest's full-application launch */
                 MockEmailServiceConfiguration.class}) /* Prevent the loading of the real EmailService during @SpringBootTest's full-application launch */
@ExtendWith(MockitoExtension.class)
public class Ar11ApplicationServiceTest {
    
    // Custom object to be constructed for unit testing, includes DAO sub-object via InjectMocks
    @InjectMocks
    Ar11ApplicationServiceImpl ar11ApplicationServiceImpl;
    // Custom DAO sub-object to be constructed for this unit test via Mock
    @Mock
    private Ar11ApplicationDAO ar11ApplicationDAO;

    @BeforeEach
    void setUp() throws Exception {
        // Manually construct/wire my own custom objects for unit testing
        ar11ApplicationServiceImpl = new Ar11ApplicationServiceImpl();
        ar11ApplicationDAO = new Ar11ApplicationDAO();
        ar11ApplicationServiceImpl.setAr11ApplicationDAO(ar11ApplicationDAO);
        MockitoAnnotations.openMocks(this);

        // Set up mock behaviors for the DAO sub-object with when/then
        when(ar11ApplicationDAO.method(filename)).thenReturn(..)
        doNothing().when(ar11ApplicationDAO).voidMethod(params);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Value 变量在使用 @TestPropertySource 的单元测试中为 NULL 的相关文章

  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • 带有 HttpContext 的 ASP.NET MVC 单元测试控制器

    我正在尝试为我的一个控制器编写一个单元测试 以验证视图是否正确返回 但该控制器有一个访问 HttpContext Current Session 的基本控制器 每次我创建控制器的新实例时 都会调用 basecontroller 构造函数 并
  • Spring Boot 应用程序中的 Vaadin 23 Rest-API 和 UI

    我使用 Vaadin 23 3 5 开发了一个小型应用程序 到目前为止 我仅将 Spring Boot Security 与默认的 LoginView 结合使用来进行身份验证 然后使用 MainLayout 来浏览我的应用程序 但现在我需要
  • 无法解决 spring-web-reactive 的依赖关系

    我在 SpringBoot 应用程序中使用响应式方法进行异步流处理 我有这 6 个 SpringFramework 导入 import org springframework web reactive function server Rou
  • Spring Security 3.0 中 security-role-ref 和 role-link 的等效项是什么?

    我正在将带有 web xml 安全约束 安全角色和登录配置的标准 Web 应用程序移植到 Spring Security 3 0 我在 web xml 中找到了几乎所有功能的等效映射 security role ref 元素除外 我不想指定
  • Spring Boot Batch - 不包括 JobLauncherCommandLineRunner

    我在 Spring Boot 中配置了一个简单的 Spring Batch 作业 类似于弹簧导轨 http spring io guides gs batch processing 在启动时 它会自动检测并调用 JobLauncherCom
  • 如何在 Spring 中将多个映射合并为一个

    我的上下文文件中定义了几个地图 有没有一种方法可以将这些映射组合成一个包含其所有条目的映射 而无需编写 Java 代码 并且无需使用嵌套映射 我正在寻找 Map m new HashMap 的等效项m putAll carMap m put
  • Akka.net 和单元测试

    我想使用 Akka net TestKit 编写单元测试 但我有一个问题 我有一个 SubscriptionService 类 它负责将消息传输给选定的参与者 public class SubscriptionService Receive
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • Spring boot JPA不使用findById返回现有结果

    我使用 Oracle 数据库和一些 JPA 查询创建了一个非常小且简单的 Spring Boot 应用程序 这是不返回数据的代码片段 该数据实际上存在于数据库中 letterRecipientNonOas letterRecipientNo
  • 如何使用 google test for C++ 来运行数据组合

    我有一个单元测试 需要针对 200 种可能的数据组合运行 生产实现在配置文件中有要测试的数据 我知道如何模拟这些值 我更喜欢为每个组合编写单独的测试用例 并使用某种方式循环数据 有没有使用 Google test for C 的直接方法 您
  • Web 服务与 Spring 远程处理

    我完全不明白通过 spring 或 axis 实现的常规 Web 服务与远程处理之间的区别 如果我的问题根本不相关 我只是对 Spring Web 服务与 Spring 远程处理感到困惑 何时使用远程处理以及何时使用 Web 服务 感谢您的
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • org.springframework.validation.BeanPropertyBindingResult异常

    嗨 我是 spring 框架的新手 我做了一个小例子 我尝试使用 spring 验证 api 验证我的输入字段 这是代码 RequestMapping value applicationFormSubmit method RequestMe
  • Xcode 异步单元测试在主线程上等待

    我正在尝试使用 Xcode 中的单元测试来测试一些异步代码 但主线程被阻塞 问题在于 某些正在测试的代码期望从 iOS 类 AVFoundation 接收回调 但是 AVFoundation 类似乎只会在主线程上回调 问题是 如果我正在进行
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 将不同类型的参数传递给 jdbctemplate 查询

    我正在尝试使用带有少量不同类型参数的 where 子句从数据库中检索记录 这是我编写的简单方法 我将breedId和性别作为参数传递 public List
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 我的 IP 在 PHP 主服务器中显示错误

    好吧 足够简单 好吧 也许不是 我的 IP 目前是72 184 212 85然而 上面我在脚本的 IP 阻止系统上使用的代码将我的 IP 显示为我的家庭服务器 IP127 0 0 1 因此 当我转到脚本时 我的 IP 显示为127 0 0
  • 在 Android 上获取 OAuth2 令牌时 UNREGISTERED_ON_API_CONSOLE

    我们使用 Android Jellybean 及更高版本 并且我们有一个应用程序需要使用 OAuth2 与 Google 进行身份验证 我简化了登录活动 但它看起来像这样 AccountManager mAccountManager Acc
  • 在 npm 脚本中运行 2 个命令(nodemon && sass --watch)

    我有一个 package json 文件 如下所示 scripts test echo Error no test specified exit 1 start node src app js dev nodemon src app js
  • 我应该在 Windows 消息框中使用警告图标还是问号图标?

    许多人都知道MessageBoxIcon类型为 问题 如果你对这个图标不是特别熟悉 它只是一个美化的问号 我很好奇这个图标在专业应用程序中是否可以接受 例如 假设我有一个按钮 单击该按钮将清除整个表单上的所有文本字段 单击按钮时 我想警告用
  • 是否可以为气泡图制作图例?

    目前 互联网上没有使用 dc js 和 dc legend 函数的带有图例的气泡图的示例 that sessions scatterplot width 830 height 350 transitionDuration 1000 marg
  • 属性列表还是继承丛林?

    我有 2 个应用程序 我们称它们为 AppA 和 AppB 相互通信 AppA 正在向 AppB 发送对象 可能有不同的对象 AppB 并不支持每个对象 一个对象可以是一个模型 想象一下游戏 其中模型是车辆 房屋 人等 可能有不同的 App
  • 铬中的 SQLite

    是否可以制作像 Firefox 扩展一样与 sqlite 数据库交互的 chrome 扩展 您能给我一些建议或链接吗 哪里有关于开发与 sqlite 交互的 chrome 扩展的更多信息 谢谢 您可以使用网络 SQL API http de
  • 如何在 PrimeFaces 的工具提示上显示错误消息时摆脱空工具提示?

    我在某处显示错误消息
  • 如何在 R 中重置 par(mfrow)

    我设置了 par mfrow c 1 2 现在每次我绘制它时 它都会显示将其分成 2 个图 我怎样才能将其重置为仅显示一个图 非常感谢 您可以重置 mfrow 参数 par mfrow c 1 1
  • 阻止垃圾邮件发送者创建帐户(reCaptcha 不起作用)

    您好 我们刚刚在我们的电子邮件系统中注意到一堆尼日利亚垃圾邮件帐户 现在 我们的注册表单中确实有一个 reCaptcha 但显然他们手动或以其他方式绕过了它 这似乎是一种半手动规避 因为帐户不是批量创建的 而是以中间间隔几分钟的方式源源不断
  • enable_if:不带参数的 void 成员函数的最小示例

    我正在努力更好地理解std enable if在 C 11 中 并一直在尝试编写一个最小的示例 一个类A具有成员函数void foo 根据类型有不同的实现T来自类模板 下面的代码给出了所需的结果 但我还没有完全理解它 为什么版本V2工作 但
  • Double 数据类型,计算小数位后的小数

    下面的方法应该返回 这个 双精度 值有多少小数精度 尾随数字的数量 的答案 当值看起来像 5900 43 5900 043 等等时 我就猜对了 当该方法收到 5900 00 时 它返回 0 这是错误的 在我的需要中
  • 从单独的线程访问表单的控件

    我正在练习线程并遇到这个问题 情况是这样的 我在一个表单上有 4 个进度条 一个用于下载文件 一个用于显示页面加载状态等 我必须从单独的线程控制每个 ProgressBar 的进度 问题是我得到了无效操作异常其中说 跨线程操作无效 控制 p
  • 按引用传递引用与按值传递引用 - C#

    问候 我明白了按值传递和按引用传递之间的区别 但是通过 ref 传递引用 例如数组 和通过值传递数组是我似乎无法理解的 如何通过引用传递引用 int myArray 1 2 3 PassByVal myArray PassByRef ref
  • 什么时候不应该使用 React 备忘录?

    我一直在玩React 16 6 0最近我喜欢这个想法反应备忘录 但我一直无法找到有关最适合实现它的场景的任何内容 React 文档 https reactjs org docs react api html reactmemo https
  • 使用后置变量传递表数据

    基本上我有一个表 其中包含来自数据库的一堆数字 其中包含总计 小计列 我不打算将任何总数添加到数据库中 但我需要将总数从一页传递到下一页 我似乎无法使用 PHP 将它们作为后置变量正确传递 我想知道这是否是一个糟糕的策略 其次我应该做什么
  • 如何为角度反应形式的自定义验证器编写单元测试用例?

    我有一个自定义模型驱动的表单验证器来验证最大文本长度 export function maxTextLength length string return function control FormControl const maxLeng
  • 如何使用 Spring Data JPA 和 Hibernate 执行 H2 存储过程?

    我想使用 Spring Data JPA 和 Hibernate 来执行一个简单的 H2 数据库存储过程 存储过程类 public class H2StoredProcedures public static String stringIn
  • Java 正则表达式 (?i) 与 Pattern.CASE_INSENSITIVE

    我在用着 b w W 1 b 随着input input replaceAll regex 1 查找字符串中的重复单词并删除重复项 例如 字符串输入 for for for 将变为 for 然而 即使我使用过 它也无法将 Hello hel
  • @Value 变量在使用 @TestPropertySource 的单元测试中为 NULL

    在下面的单元测试中 我手动提供属性并尝试从现有的 YAML 资源文件中读取它们 尝试了不同的策略 TestPropertySource the Value 属性未设置 我总是为它们获取 NULL SpringBootConfiguratio