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

重写单个Spring Boot测试的属性

徐麒
2023-03-14

考虑以下示例:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
    properties = {
        "some.property=valueA"
    })
public class ServiceTest {
    @Test
    public void testA() { ... }

    @Test
    public void testB() { ... }

    @Test
    public void testC() { ... }
}

我正在使用SpringBootTest注释的properties属性为这个测试套件中的所有测试设置some.property属性的值。现在,我想为其中一个测试(例如testc)设置该属性的另一个值,而不影响其他测试。我怎样才能做到这一点?我已经阅读了Spring Boot docs中的“测试”一章,但是我还没有找到任何与我的用例匹配的东西。

共有1个答案

孔礼骞
2023-03-14

您的属性在Spring上下文加载期间由Spring计算。
,因此在容器启动后不能更改它们。

作为解决办法,您可以将方法拆分到多个类中,这样就可以创建它们自己的Spring上下文。但是要小心,因为这可能是一个坏主意,因为测试执行应该很快。

更好的方法是在测试中的类中设置一个setter,该setter注入some.property值,并在测试中使用此方法以编程方式更改该值。

private String someProperty;

@Value("${some.property}")
public void setSomeProperty(String someProperty) {
    this.someProperty = someProperty;
}
 类似资料:
  • 我有一个测试: 这是控制器(测试类)中的相关部分: 我有一个在下,我需要覆盖它,仅针对名为 也许我可以使用另一个文件“application.properties”和另一个类测试,但我正在寻找一个更智能的解决方案。

  • 我知道我可以使用。但是注释只接受文字。如果我想计算值,或者即使我想计算要重写的属性,该怎么办。Spring可行吗?如何在Spring的中注册任意属性?

  • 需要对项目的控制器部分进行单元测试,但却得到了错误。我相信ModelAndVIew部分导致了这个问题,尽管我曾经嘲弄过它并返回ModelAndVIew,因为它是方法的返回类型。然而,它并不起作用。pom.xml没有任何问题,因此没有添加它。ProjectController: java.lang.IllegalStateException:找不到@SpringBootConfiguration,您

  • 概要文件对于我所需要的似乎有点过分了,我不确定这是否可以通过主注释来实现,因为不同的单元测试可能有不同的模拟。

  • 我不会告诉你有关后台任务的单元测试的任何内容,因为Hangfire没有添加任何特定方法 (除了 IJobCancellationToken 接口参数)去改变任务。使用您最喜爱的工具,并照常写入单元测试。本节介绍如何测试创建的后台任务。 所有的代码示例都使用静态 BackgroundJob 类来告诉你如何做这个或那些东西,只是出于简单演示的目的。但是当你想测试调用的静态方法时,会变得很痛苦。 不用担

  • 我创建了一个包含各种endpoint的Spring Boot应用程序。除了和登录终结点之外,我为其他请求添加了过滤器。所有其他请求应具有: