Spring boot:@ConfigurationProperties 测试不满足

2024-01-01

我在测试执行时遇到此异常:

UnsatisfiedDependencyException:创建名为“net.gencat.transversal.espaidoc.mongo.GridFSTest”的 bean 时出错:通过字段“resourceProperties”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“net.gencat.transversal.espaidoc.ResourcesConfigProperties”类型的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。

所以,我认为信息已经足够明确了:ResourcesConfigProperties is not satisfied.

My test:

RunWith(SpringRunner.class)
@SpringBootTest()
public class GridFSTest {

    @Autowired
    private GridFsTemplate gridFsTemplate;

    @Autowired
    private ResourcesConfigProperties resourceProperties;

    public URL getHugeResource() {
        try {
            return Paths
                .get(this.resourceProperties.getHuge())
                .toUri()
                .toURL();
        } catch (MalformedURLException e) {
            return null;
        }
    }

    @Test
    public void storeHugeFile() throws IOException {
        URL resource = this.getHugeResource();

        this.gridFsTemplate.store(
            resource.openStream(),
            resource.getPath(),
            "mime"
        );
    }
}

and ResourcesConfigProperties is:

@ConfigurationProperties(prefix = "files")
public class ResourcesConfigProperties {

    private String huge;

    /**
     * @return the huge
     */
    public String getHuge() {
        return huge;
    }

    /**
     * @param huge the huge to set
     */
    public void setHuge(String huge) {
        this.huge = huge;
    }

}

into my src/test/resources我有我的application.properties file:

files.huge: /home/jcabre/Downloads/1GB.zip

有任何想法吗?

EDIT

Spring boot 主要应用:

@SpringBootApplication(
    //scanBasePackages = { "cat.gencat.ctti.canigo.arch.web.rs" },
    exclude = JmxAutoConfiguration.class
)
@EnableConfigurationProperties({
    ApiProperties.class,
    FileStoreProperties.class
})
@Import(RedisConfiguration.class)
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }
}

TL;DR:

它正在发生,因为@ConfigurationProperties不受应用程序上下文管理你构建测试,尽管它们会在应用程序启动时加载,因为您有@EnableConfigurationProperties在您的应用程序主类上。

@EnableConfigurationProperties在主类上仅影响您所拥有的应用程序上下文bootRun, 但不是在@SpringBootTest。在许多情况下,您在测试中构建的应用程序上下文可能与bootRun,就像你的情况一样。

你可以加@Component让上下文意识到它,无论是在gradle bootRun and in gradle test。这是最简单的方法,但不是 100% 建议的方法。


如果你有时间的话,更合适的方法是详细说明

相反,您可以添加@EnableConfigurationProperties({Config1.class, Config2.class}) in a @SpringBootTest,仅将一些配置属性类注入到上下文中,以避免注入开销。

它会像:

//@RunWith(SpringRunner.class) // for JUnit4 in Spring
@ExtendWith(SpringExtension.class) // for JUnit5 in Spring. 
@SpringBootTest
@EnableConfigurationProperties({
        ResourcesConfigProperties.class,
})
@Data
public class ConfigsTest {

    @Autowired
    private ResourcesConfigProperties resourceConfigProperties;

    ...

}

更好的是,您可以使用@SpringBootTest(classes={}): 内的课程{}是那些你想要的应用程序上下文@SpringBootTest管理(创建、初始化、从 yaml 文件加载属性等)。然后您不必加载所有上下文,而只需加载其中的一部分。

您可以将所有类别分组@ConfigurationProperties在一类中@Configuration,并将其放入classes={} of @SpringBootTest,而不是重复这个列表@ConfigurationProperties到处。就像是:

//@RunWith(SpringRunner.class) // for JUnit4 in Spring
@ExtendWith(SpringExtension.class) // for JUnit5 in Spring. 
@SpringBootTest(classes = {
    TestConfiguration.class
})
@Data
public class ConfigsTest {

    @Autowired
    private ResourcesConfigProperties resourceConfigProperties;


    ...

}

TestConfiguration.java:

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

Spring boot:@ConfigurationProperties 测试不满足 的相关文章

随机推荐

  • 在 ASPNET MVC 中通过身份验证提供 iCalendar 文件

    我正在尝试在我的 MVC 应用程序中提供 iCalendar 文件 ics 到目前为止一切正常 我有一部 iPhone 订阅了日历的 URL 但现在我需要为每个用户提供个性化的日历 在 iPhone 上订阅日历时 我可以输入用户名和密码 但
  • 我需要担心阻塞任务吗?

    我需要在多大程度上担心 NET 中的阻塞任务 即 NET 任务调度程序如何处理线程池中线程的阻塞和超额订阅 例如 如果我的任务中有一些 IO 我是否应该始终使用LongRunning暗示 或者任务调度程序启发式处理得更好吗 在C 中有一个O
  • 实现滑动刷新布局后,回收器视图无法正确滚动

    在实现 滑动刷新 视图之前 回收器视图运行顺利 但每当我尝试向下滚动回收器视图时 滑动刷新 都会干扰并阻碍滚动移动 这是问题的屏幕截图 请注意 当回收器视图向下滚动时 会出现滑动刷新布局 这是我的布局片段
  • 命令行 Java 调试器

    有没有好的java命令行调试器 我给了 JDB 一个机会 但命令行界面很糟糕 如果我想更改最后一行并重新执行它 我必须重新输入整行 点击 向上箭头 只会给我 A 包 类 方法名也没有完成 GDB 是一个不错的选择 但我不知道如何用它进行远程
  • R 中的全局变量和局部变量

    我是 R 的新手 我对 R 中局部变量和全局变量的使用感到很困惑 我在互联网上读到一些帖子说如果我使用 or lt 我将在当前环境中分配变量 并使用 lt lt 我可以在函数内部访问全局变量 然而 据我记得 在 C 中 每当在括号内声明变量
  • 如何将引号传递给javascript函数

    我有一个 javascript 函数 它接受包含引号的字符串并显示在输入字段中 但是这个函数不接受引号后面的字符串 function searchFormatter cellvalue options rowObject return
  • 如何在 JavaScript 中实现类似 Swift 的枚举以及关联值?

    Swift 语言拥有出色的枚举支持 人们不仅可以用案例定义标准枚举 而且案例还可以具有 与其关联 的可选值 例如 摘自 Swift 文档 enum Barcode case UPCA Int Int Int Int case QRCode
  • 如何关闭Android Studio 3.0标签? [复制]

    这个问题在这里已经有答案了 我刚刚升级到 Android Studio 3 0 我注意到我的代码中到处都是奇怪的标签 标签 我无法手动删除这些标签 因为光标只是跳过它们 如何关闭这些标签 Android Studio 具有与 Intelli
  • 有什么方法可以在 Java/Eclipse 中对方法进行分组吗?

    我希望能够将类似的方法分组并让它们出现在 Eclipse 的大纲视图中 这使得浏览大量代码变得更容易 并且更容易找到所需的方法 在 Objective C 中 有一个可以设置的 pragma mark 命令 java eclipse 有类似
  • 当 KVM-QEMU 打开时,Intel-PT 不记录任何数据包

    我尝试在主机上使用 Intel PT 同时在客户机上运行通用软件程序 所以我期望主机中运行的 Intel PT 将记录所有相关数据包 如 PIP FUP TSC 等 以及所有基于 VM 的数据包 如 VMCS 我使用以下命令 perf kv
  • 授权请求出现问题

    我正在尝试在 Sinch 服务中发出conferenceCallout 请求 但我在签名方面遇到问题 我粘贴代码
  • 如何获取 Administration_area_level_1、2 等类型的名称

    我正在使用谷歌地图 API http code google com apis maps documentation geocoding 我了解如何进行查询并解析返回的 JSON 我想要做的是获取 Administration area l
  • Flask Google Cloud App Engine:OSError:[Errno 98]地址已在使用中

    我正在尝试在谷歌云应用程序引擎上部署烧瓶应用程序 它在本地虚拟环境中运行顺利 但在云中运行时出现 502 错误 现在我尝试使用调试模式和 SSH 进入我的实例 在云服务器上调试我的代码 使用docker exec it ID bin bas
  • GAE App Engine Websocket 客户端在 1 小时后断开连接

    我有一个简单的 Websocket 服务器部署到 AppEngine 恰好 1 小时后客户端断开连接 错误代码为 1006 我相信这是由于 nginx 负载均衡器而发生的 我尝试更改 nginx app conf 但没有帮助 proxy s
  • 为什么scala无法推断方法参数的类型

    我想知道为什么 scala 不能推断方法参数的类型 我可以看到在 haskel 也有类型推断 中可以做同样的事情 那为什么不选择 scala 呢 首先 Scala 中的情况与 Haskell 中的情况有很大不同 因为它是一种 OO 语言 并
  • 突出显示 amcharts 中的最高点和最低点

    有人可以帮助我更改项目符号或使用 amcharts 突出显示最高和最低值吗 我正在使用序列图 函数 突出显示 中给出的条件是匹配的 但是项目符号没有突出显示到最高点和最低点 任何帮助将不胜感激 请在下面找到我的代码
  • != 检查线程安全吗?

    我知道复合操作例如i 不是线程安全的 因为它们涉及multiple运营 但是检查引用本身是线程安全的操作吗 a a is this thread safe 我尝试对此进行编程并使用多个线程 但没有失败 我想我无法在我的机器上模拟比赛 EDI
  • 检查 PHP 中的会话是否是新的

    我有一个网站 需要在每个用户会话中执行一次特定的后端功能 因此 我希望能够确定任何给定的页面视图是否是给定会话中的第一个 根据 PHP 文档 会话开始 创建一个会话或恢复当前会话 通过 GET 或 POST 请求传递的会话标识符 或通过 曲
  • 使用 php 代理跨域 Ajax GET 请求

    在过去的几天里 我一直在为这件事烦恼 我试图从公共 API 获取跨域 ajax GET 请求 但我根本无法让它工作 PHP 我正在使用 Ben Alman 的 ba simple proxy https github com cowboy
  • Spring boot:@ConfigurationProperties 测试不满足

    我在测试执行时遇到此异常 UnsatisfiedDependencyException 创建名为 net gencat transversal espaidoc mongo GridFSTest 的 bean 时出错 通过字段 resour