2016-04-01 5 views
0

У меня проблема в моем тесте JUNIT с Spring boot: @Value не разрешен. Вот код:Тест Spring Boot: источник источника с @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 Ressource:

@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 не была решена, почему? Моя конфигурация загрузки весны была загружена ALL.

parametrage-environnement.properties файл находится в обоих путях: SRC/главная/ресурсы/конфигурации и SRC/тест/ресурсы/конфигурации (копировать/вставить)

ответ

0

1) Поскольку мой контроллер издевались, я не может использовать инъекции пружины непосредственно присутствующую в контроллере (насмешливый аннигилируют Spring!)

2) Синтаксис

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

неправильно, потому что, окр должен быть родник боб (@Bean). См here

Так, с @PropertySource, мы должны использовать @value синтаксис ("$ {connexion.proxy.host}") и не забывайте Разрешитель:

//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; 

Спасибо в любом случае

+1

Вы можете избежать использования 'ReflectionTestUtils', если вы использовали инъекцию конструктора –

Смежные вопросы