当前位置: 首页 > 面试题库 >

在每个spring boot @Test上重写单个@Configuration类

韦阳辉
2023-03-14
问题内容

在我的spring boot应用程序中,我想在所有@Configuration测试中仅使用测试配置(尤其是我的@EnableAuthorizationServer @Configuration类)覆盖我的一个类。

到目前为止,在对Spring Boot测试功能和Spring Integration测试功能进行概述之后,还没有一个简单的解决方案浮出水面:

  • @TestConfiguration:用于扩展,而不是覆盖;
  • @ContextConfiguration(classes=…​)@SpringApplicationConfiguration(classes =…​)让我重写整个配置,而不仅仅是一个类;
  • 建议使用@Configurationa 内部的类@Test来覆盖默认配置,但未提供示例。
    有什么建议?

问题答案:

内部测试配置

用于测试的内部@Configuration的示例:

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

    @Configuration
    static class ContextConfiguration {
        @Bean
        @Primary //may omit this if this is the only SomeBean defined/visible
        public SomeBean someBean () {
            return new SomeBean();
        }
    }

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

可重复使用的测试配置

如果你希望将测试配置重用于多个测试,则可以使用Spring Profile定义一个独立的Configuration@Profile("test")。然后,让你的测试班级通过激活配置文件@ActiveProfiles("test")。查看完整的代码:

@RunWith(SpringRunner.class)
@SpringBootTests
@ActiveProfiles("test")
public class SomeTest {

    @Autowired
    private SomeBean someBean;

    @Test
    public void testMethod() {
        // test
    }
}

@Configuration
@Profile("test")
public class TestConfiguration {
    @Bean
    @Primary //may omit this if this is the only SomeBean defined/visible
    public SomeBean someBean() {
        return new SomeBean();
    }
}

@Primary

@Primary对bean定义标注为确保这一具有优先权如果不止一个被发现。



 类似资料:
  • 在我的Spring Boot应用程序上,我只想用测试配置(特别是我的类)覆盖我所有测试上的一个类。 到目前为止,在概述了Spring Boot测试特性和spring集成测试特性之后,还没有一个简单的解决方案浮出水面: :用于扩展,而不是重写; 和让我重写整个配置,而不仅仅是一个类; 建议使用中的内部类重写默认配置,但未提供示例; 有什么建议吗?

  • 我已经尝试了这篇简单的教程https://spring.io/guides/gs/consource-web-service/,它起作用了。 然后尝试连接到另一个SOAP服务,使用一个附加的和扩展的客户端类。似乎这两个客户机类都使用了相同的-class,这使得我首先添加的一个失败(未知的jaxb-context等)。如何确保客户端类使用正确的-class?

  • 问题内容: 我有一个测试套件,可以在其中退出系统并在中关闭浏览器。我尝试使用每种测试方法都使用Selenium拍摄失败的测试屏幕截图。我手动检查了它只在每个之前运行,但我想在它之前和之后进行设置。我找不到简单的解决方案。任何帮助将不胜感激。 我得到的输出是 问题答案: 由于规则的设置方式,因此不能有@before之后或@after之后的规则。您可以想到放在测试方法上的诸如shell之类的规则。要进

  • 我必须定义一个包含大写方法的Translator类。该方法将收到一个StringBuffer,它只包含英文字母和空格,并将更改它,以便每个单词都以大写字母开头。 //我需要定义的类

  • 问题内容: 如果用户未登录,我希望登录表单(来自django.contrib.auth的AuthenticationForm)出现在网站的每个页面上。当用户登录时,它们将被重定向到同一页面。如果有错误,该错误将与表格一起显示在同一页面上。 我想你需要一个上下文处理器来为每个模板提供表单。但是,那么你还需要每个视图来处理发布的表单吗?这是否意味着你需要创建一些中间件?我有点迷路了。 是否有接受的方法

  • 我目前正在处理一个Spring Batch CSV导出。使用基于块的读取器、写入器和处理器。读取和处理工作无懈可击,但是FlatFileItemWriter总是覆盖输出的CSV文件。我希望作业检查是否存在一个文件,如果它存在,增加文件名,并写到一个新的文件。 下面是我当前的代码:Helper类,它检查文件是否存在,并返回新字符串供编写器使用。 我的项目编写器: 每次执行作业时,FileWriter