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

Spring Boot Test:属性源和@Value没有解决

阎麒
2023-03-14

我在使用Spring boot的JUNIT测试中遇到了一个问题:@Value没有得到解决。代码如下:

Spring启动配置类:

@Configuration
@PropertySource(value="classpath:/config/parametrage-environnement.properties",name="env")
public class ExternalRessourceConfiguration {

    //To resolve ${} in @Value
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
            return new PropertySourcesPlaceholderConfigurer();
        }
}

测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
public class ConnexionEbicsResourceIntTest {

@Test
@Transactional
public void createConnexionEbics() throws Exception {

            restConnexionEbicsMockMvc.perform(post("/api/connexionEbicss")
            .contentType(TestUtil.APPLICATION_JSON_UTF8)
            .content(TestUtil.convertObjectToJsonBytes(connexionEbicsDTO)))
            .andExpect(status().isCreated());

Java资源:

@RestController
@RequestMapping("/api")
public class ConnexionEbicsResource {

    @Value("${env['connexion.proxy.host']}")
    //@Value("${connexion.proxy.host}") 
    public String protocol;

 @RequestMapping(value = "/connexionEbicss",
        method = RequestMethod.POST,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    public ResponseEntity<ConnexionEbicsDTO> createConnexionEbics( @RequestBody ConnexionEbicsDTO connexionEbicsDTO) throws URISyntaxException {
        log.debug("REST request to save ConnexionEbics : {}", connexionEbicsDTO);
        String a = protocol;

}

在JavaResSource中,当我运行测试时,“a”为空。@Value没有解析,为什么?我的Spring Boot配置已全部启动。

参数环境。属性文件位于两个路径中:src/main/resources/config和src/test/resources/config(复制/粘贴)

共有1个答案

南宫才英
2023-03-14

1)由于我的控制器被嘲笑,我不能使用直接存在于控制器中的Spring注入(嘲笑湮灭Spring!)

2) 语法

@Value("${env['connexion.proxy.host']}")

是错误的,因为env应该是一个springbean(@bean)。看这里

因此,对于@PropertySource,我们必须使用@Value(${connexion.proxy.host})语法,并且不要忘记解析器:

  //To resolve ${} in @Value
        @Bean
        public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
            return new PropertySourcesPlaceholderConfigurer();
        }

3) 要在控制器类中设置协议,我需要从测试类中注入它:

 @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        ConnexionEbicsResource connexionEbicsResource = new ConnexionEbicsResource();
        ReflectionTestUtils.setField(connexionEbicsResource, "connexionEbicsService", connexionEbicsService);
        **ReflectionTestUtils.setField(connexionEbicsResource, "protocol", protocol);**
        ReflectionTestUtils.setField(connexionEbicsResource, "connexionEbicsMapper", connexionEbicsMapper);
        this.restConnexionEbicsMockMvc = MockMvcBuilders.standaloneSetup(connexionEbicsResource)
            .setCustomArgumentResolvers(pageableArgumentResolver)
            .setMessageConverters(jacksonMessageConverter).build();
    }

在测试类中加载资源束:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
@PropertySource(value="classpath:/config/parametrage-environnement.properties",name="env")
//@PropertySource("classpath:/config/parametrage-environnement.properties")
public class ConnexionEbicsResourceIntTest {
....
  @Value("${connexion.proxy.host}")
    public String protocol;

无论如何谢谢你

 类似资料:
  • TypeScript抱怨HTMLElement没有value属性,但当我在JavaScript中使用它时,它可以正常工作。 在JavaScript中,var inputValue=document。getElementById('input1');安慰日志(inputValue.value);//它给出了输入元素的值 我可以知道为什么TypeScript抱怨吗?

  • 问题内容: angularjs模板中的和属性之间有什么区别?如果我在使用value属性的字段上使用它,则它正常工作,但是如果我将该属性更改为它,它将停止工作。 问题答案: 根据 文档 ,采用 “角表达式,其值将绑定到 元素的属性”。 因此,当您使用时,它将被解释为一个表达式,并且被绑定到(可能是)。 对于评估表达式很有用- 与设置硬编码值相比没有优势。但是,如果您想使用硬编码值,则必须将其包含在:

  • 在以下Spring Boot应用程序中,@Value注释在WebSecurityConfig类中成功,但在FileSystemUplad类中没有。在FileSystemUplad类中,值(测试)使用与WebSecurityConfig使用的相同属性文件导致null。 应用.java WebSecurityConfig.java(其中@Value注入工作正常) FileSystemUpload.ja

  • 问题内容: 我有一个包含许多文件的目录。每个文件定义一些类。我的目录中也有一个空白。 例如: 我正在尝试导入和访问所有这些文件中定义的类: 这给我一个错误的说法,即没有属性。为什么?为什么我只能访问其中一个文件(),而不能访问其他文件? 问题答案: 问题是子模块不会自动导入。您必须显式导入模块: 如果您真的坚持要在导入时可用,则可以输入以下内容: 然后,这将按预期工作:

  • 这是我的密码: 这条线给了我错误 "属性错误:'浮点'对象没有属性'exp'"。X,t是Numpy ndarray。

  • 问题内容: 我最近将Windows计算机上的BeautifulSoup从3.0版升级到了4.1版。 我现在遇到一个奇怪的错误: 这是导致引发异常的代码段: BS的文档没有提到构造函数签名是如何从v3更改为v4的。我该如何解决? 问题答案: 传入的HTML或XML实体始终会转换为相应的Unicode字符。Beautiful Soup 3有许多重叠的实体处理方式,已被删除。 BeautifulSoup