2016-11-16 10 views
5

नहीं पहुँच सकते हैं मुझे लगता है कि मैं MockMvc वर्ग इसका परीक्षण करना कोशिश कर रहा हूँ @RestController साथ एनोटेट कुछ वर्गों की है। अंतिम-बिंदु एक वेब अनुप्रयोग से ठीक से जवाब है, लेकिन मैं निम्नलिखित त्रुटि जब (IntelliJ विचार से) परीक्षण चलाने के:स्प्रिंग बूट एकीकरण परीक्षणों application.properties फ़ाइल

java.lang.IllegalArgumentException: Could not resolve placeholder 
'spring.data.rest.base-path' in string value "${spring.data.rest.base-path}/whatever" 

यह कैसे application.properties फ़ाइल लग रहा है जैसे:

spring.data.rest.base-path=/api 
spring.profiles.active=dev 
... 

मेरे पास अतिरिक्त (अलग) गुणों के साथ application-dev.properties नामक एक फ़ाइल भी है।

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebIntegrationTest // Also tried: @WebAppConfiguration 
@ActiveProfiles("dev") 
// Also tried: @PropertySource("classpath:application.properties") 
// Also tried: @TestPropertySource("classpath:application.properties") 
public class MyRestControllerTest { 
    ... 
} 

दूसरी ओर, यह कैसे बाकी नियंत्रकों लागू किया जाता है (जहां समस्याग्रस्त संपत्ति किया जा रहा है) है:

यह कैसे परीक्षण कक्षाओं एनोटेट है

@RestController 
@RequestMapping("${spring.data.rest.base-path}/whatever") 
public class MyRestController { 
    ... 
} 

इस प्रकार एप्लिकेशन का मुख्य वर्ग इस तरह दिखता है:

@SpringBootApplication(scanBasePackages = {...}) 
@EnableJpaRepositories({...}) 
@EntityScan({...}) 
public class Application { 
    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 
} 

और अंत में, यह (एक उप-समूह है) परियोजना की संरचना:

my-project 
|_ src 
    |_ java 
    | |_ com.example.x 
    |  |_ controller 
    |  |_ MyRestController.java 
    | 
    |_ test 
    | |_ com.example.x 
    |  |_ controller 
    |  |_ MyRestControllerTest.java 
    | 
    |_ resources 
     |_ application.properties 
     |_ application-dev.properties 

मैं वेब भर में समस्या के कई समाधान मिल गया है, लेकिन उनमें से कोई मेरे लिए काम करने के लिए लग रहा था।

+0

मुझे नहीं पता था कि आपने इस संपत्ति का उपयोग किया था – Jaiwo99

+0

क्षमा करें, आप सही हैं मैंने इसे स्पष्ट नहीं किया। इसका उपयोग सभी अंत-बिंदुओं के लिए आधार पथ को परिभाषित करने के लिए आरईएसटी नियंत्रकों में किया जा रहा है। वहां संपत्ति ठीक काम कर रही है - जैसा कि मैंने उल्लेख किया है, मैं उम्मीद के अनुसार ब्राउज़र से उन्हें एक्सेस कर सकता हूं।एकमात्र जगह जिसे इसे पढ़ा नहीं जा सकता है परीक्षण हैं। – DanielM

+0

ऐसा लगता है जैसे इंटेलिज संसाधन संसाधन के रूप में/संसाधनों को पहचान नहीं पाया था। @PropertySource ('file: /path/to/application.properties') –

उत्तर

0

आपका application.properties परीक्षण क्लासपाथ पर नहीं होना चाहिए। आपको IntelliJ में अपनी प्रोजेक्ट के लिए "टेस्ट रिसोर्स" स्थान परिभाषित करना चाहिए और वहां application.properties फ़ाइल बनाना चाहिए।

बीटीडब्ल्यू, मुझे यह एक अलग परीक्षण गुण फ़ाइल के लिए उपयोगी पाया गया है, क्योंकि परीक्षण गुण आम तौर पर सामान्य रन-टाइम वातावरण से अलग होते हैं।

+0

आज़माएं मैंने संसाधन फ़ोल्डर को IntelliJ पर "टेस्ट रिसोर्सेज रूट" के रूप में चिह्नित करने का प्रयास किया है, लेकिन इससे मदद नहीं मिली। – DanielM

+0

जब आप टेस्ट क्लासपाथ में वास्तविक फ़ाइलों को देखते हैं, तो आप क्या देखते हैं? दुर्भाग्यवश, मैंने कभी भी इंटेलिजे का उपयोग नहीं किया है, इसलिए मेरे पास सीमित अंतर्दृष्टि है। हो सकता है कि http://stackoverflow.com/questions/17039653/resources-not-copied-to-output-path-in-intellij-12-1-4 मदद करता है? –

1

जवाब अंत में वसंत एनोटेशन और न ही इंटेलीजे विन्यास, लेकिन MockMvc बल्कि साथ और विशेष रूप से, वर्ग और विधि MockMvcBuilders.standaloneSetup साथ है, जो 'setUp परीक्षण पर इस्तेमाल किया जा रहा था के साथ संबंधित नहीं था। यह एप्लिकेशन के संदर्भ का उपयोग नहीं करेगा, इस प्रकार इस पर निर्भर गुणों को ठीक से पढ़ने में सक्षम नहीं है।

MockMvcBuilders.webAppContextSetup, करने के लिए इसे बदलने के बाद जो (डॉक्स से)

बिल्ड [एस] एक MockMvc उदाहरण दिए गए का उपयोग कर, पूरी तरह से आरंभ (अर्थात, ताजा) WebApplicationContext।

सब ठीक काम किया। एकीकरण परीक्षण के लिए, इसका उपयोग करने के लिए और अधिक समझदारी होती है, है ना?

आपके समय और प्रयास के लिए सभी को धन्यवाद। उल्लिखित setUp विधि दिखाने के लिए खेद है, लेकिन मैंने कल्पना नहीं की कि समस्या वहां हो सकती थी।

संबंधित मुद्दे