2016-11-16 25 views
5

Tôi có một số lớp được chú thích với @RestController mà tôi đang cố gắng kiểm tra bằng cách sử dụng lớp MockMvc. Các kết cục được đáp ứng hoàn toàn khỏi một ứng dụng web, nhưng tôi nhận được lỗi sau khi chạy các bài kiểm tra (từ IntelliJ IDEA):Kiểm tra tích hợp Khởi động mùa xuân không thể truy cập tệp application.properties

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

Đây là cách các tập tin application.properties trông giống như:

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

Tôi cũng có một tệp có tên là application-dev.properties với các thuộc tính bổ sung (khác).

Đây là cách các lớp kiểm tra được chú thích:

@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 { 
    ... 
} 

Mặt khác, đây là cách điều khiển còn lại là thực hiện (trong đó tài sản có vấn đề đang được sử dụng):

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

Đây là cách lớp học chính của ứng dụng trông giống như:

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

Và cuối cùng, đây là (một tập hợp con của) cấu trúc của dự án:

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

Tôi đã tìm thấy một số giải pháp cho vấn đề trên toàn bộ web, nhưng không có giải pháp nào phù hợp với tôi.

+0

tôi không thấy nơi bạn đã sử dụng thuộc tính này – Jaiwo99

+0

Rất tiếc, bạn đúng Tôi không làm rõ điều đó. Nó đang được sử dụng trong các bộ điều khiển REST để xác định đường dẫn cơ sở cho tất cả các điểm cuối. Có tài sản đang làm tốt - như tôi đã đề cập, tôi có thể truy cập chúng từ trình duyệt như mong đợi.Nơi duy nhất nó không thể đọc được là các bài kiểm tra. – DanielM

+0

Có vẻ như Intellij không nhận ra/tài nguyên là thư mục tài nguyên. Hãy thử @PropertySource ('file: /path/to/application.properties') –

Trả lời

0

application.properties của bạn không được nằm trên đường dẫn lớp thử nghiệm. Bạn nên xác định vị trí "Tài nguyên thử nghiệm" cho dự án của bạn trong IntelliJ và tạo một tệp application.properties tại đó.

BTW, tôi thấy hữu ích khi có tệp thuộc tính thử nghiệm riêng biệt, vì thuộc tính thử nghiệm thường khác với môi trường thời gian chạy bình thường.

+0

Tôi đã cố đánh dấu thư mục tài nguyên là "Test Resources Root" trên IntelliJ, nhưng điều đó không giúp ích gì. – DanielM

+0

Khi bạn nhìn vào các tập tin thực tế trong bài kiểm tra classpath, bạn thấy gì? Thật không may, tôi đã không bao giờ sử dụng IntelliJ vì vậy tôi có cái nhìn sâu sắc hạn chế ở đó. Có thể http://stackoverflow.com/questions/17039653/resources-not-copied-to-output-path-in-intellij-12-1-4 giúp? –

1

Câu trả lời cuối cùng không liên quan đến chú thích mùa xuân cũng như cấu hình IntelliJ, mà là với MockMvc và đặc biệt với lớp và phương pháp MockMvcBuilders.standaloneSetup, được sử dụng trong các bài kiểm tra 'setUp. Điều này sẽ không sử dụng ngữ cảnh của ứng dụng, do đó không thể đọc đúng các thuộc tính phụ thuộc vào nó.

Sau khi thay đổi nó để MockMvcBuilders.webAppContextSetup, mà (từ các tài liệu)

xây dựng [s] một trường hợp MockMvc sử dụng nhất định, khởi tạo đầy đủ (ví dụ: làm mới) WebApplicationContext.

mọi thứ hoạt động tốt. Đối với các bài kiểm tra tích hợp, nó có ý nghĩa hơn để sử dụng này, phải không?

Nhờ tất cả vì đã dành thời gian và công sức của bạn. Xin lỗi vì không hiển thị phương thức setUp được đề cập, nhưng tôi không tưởng tượng được sự cố có thể đã gây ra ở đó.

Các vấn đề liên quan