我在使用Spring启动的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;
}
在java ressource中,当我运行测试时,“a”为null。 @Value没有解决,为什么?我的春季启动配置是全部启动。
parametrage-environnement.properties文件位于两个路径中:src / main / resources / config和src / test / resources / config(复制/粘贴)
答案 0 :(得分:0)
1)由于我的控制器被嘲笑,我不能直接使用控制器中的弹簧注入(模拟湮灭Spring !)
2)语法
@Value("${env['connexion.proxy.host']}")
是错误的,因为env应该是一个spring bean(@Bean)。见here
所以,使用@PropertySource,我们必须使用@Value(&#34; $ {connexion.proxy.host}&#34;)语法,不要忘记解析器:
//To resolve ${} in @Value
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
3)要在控制器类中设置协议,我需要从Test类中注入它:
@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;
非常感谢