2011-02-09 32 views
24

Trong các thử nghiệm đơn vị của tôi, tôi muốn tạo một thư mục tmp bên trong $ {project.build.directory}. Làm cách nào tôi có thể truy cập giá trị của $ {project.build.directory} trong thử nghiệm đơn vị của tôi?

Một cách mà tôi có thể nghĩ đến là cung cấp tệp thuộc tính được lọc trong tài nguyên thử nghiệm, giữ giá trị đó. (Tôi chưa thử, nhưng tôi nghĩ điều đó sẽ hiệu quả.)

Có cách nào trực tiếp để truy cập/chuyển giá trị tài sản này không?

Kính trọng, Florian

+0

Có lẽ chúng ta có thể định cấu hình để đặt thuộc tính hệ thống, nhưng bằng cách nào đó, tôi không thích ý tưởng truyền tải thông qua các thuộc tính hệ thống. Mặt khác, bạn có thể nói đây là một môi trường cụ thể (đường dẫn tuyệt đối ít nhất). Bạn nghĩ sao? – Puce

Trả lời

5

Hãy nhớ rằng, rằng các xét nghiệm đơn vị của bạn không cần phải được thực hiện từ Maven Plugin chắc chắn hơn, vì vậy ${project.build.directory} sở hữu có thể không có sẵn. Để thực hiện các bài kiểm tra của bạn dễ dàng hơn, tôi khuyên bạn nên sử dụng File.createTempFile().

+2

Thực ra, đó là những gì chúng tôi hiện đang làm và tôi muốn thay đổi điều đó. Chúng tôi đã có một vấn đề mà các thư mục tmp trên Hudson đã lấp đầy cho đến khi chúng tôi hết dung lượng đĩa. Chúng tôi đang nghiên cứu một số tùy chọn, một là để vượt qua một thư mục tmp bên trong thư mục đích như một đối số cho File.createTempFile(). Như thế này, "mvn clean" sẽ dọn dẹp mọi thứ. – Puce

+0

Bên cạnh đó, vì đây là một dự án Maven, tôi nghĩ rằng các bài kiểm tra sẽ chỉ chạy bằng cách sử dụng maven hoặc một IDE hỗ trợ Maven (ở đây: Eclipse). – Puce

12

Tôi nghĩ việc sử dụng thuộc tính hệ thống khá đơn giản nếu bạn định cấu hình plugin chắc chắn như được giải thích tại đây http://maven.apache.org/plugins/maven-surefire-plugin/examples/system-properties.html. Ngay cả ví dụ có trả lời trực tiếp câu hỏi của bạn:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.9</version> 
     <configuration> 
      <systemPropertyVariables> 
      <propertyName>propertyValue</propertyName> 
      <buildDirectory>${project.build.directory}</buildDirectory> 
      [...] 
      </systemPropertyVariables> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 
14

Tôi đã sử dụng một cái gì đó như thế này với một số thành công trước đây. Kiểm tra đơn vị sẽ vẫn chạy ngay cả khi không sử dụng Maven, thư mục đích sẽ vẫn nhận được hai thư mục được tạo ra liên quan đến cwd của bất cứ nơi nào các bài kiểm tra được chạy.

public File targetDir(){ 
    String relPath = getClass().getProtectionDomain().getCodeSource().getLocation().getFile(); 
    File targetDir = new File(relPath+"../../target"); 
    if(!targetDir.exists()) { 
    targetDir.mkdir(); 
    } 
    return targetDir; 
} 
+1

Tuyệt vời mà làm việc cho tôi trong maven và nhật thực. –

+0

Hơi muộn để thảo luận nhưng không 'relPath' bằng' src/main/java' vì vậy chắc chắn bạn cần phải giải quyết để nhắm mục tiêu với '../../../ target'? – Adam

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