Tôi có một tập tin data.xml
trong src/test/resources/
.
Làm thế nào tôi có thể đọc tập tin đó vào một mới FileReader
trong thử nghiệm của tôi data.scala
trong src/test/scala/
?
Tôi có một tập tin data.xml
trong src/test/resources/
.
Làm thế nào tôi có thể đọc tập tin đó vào một mới FileReader
trong thử nghiệm của tôi data.scala
trong src/test/scala/
?
Câu trả lời:
Các tài nguyên được truy cập bằng các getResource
phương thức kiểu đặc biệt mà Java cung cấp. Cho ví dụ của bạn về data.xml
việc tham gia $SBT_PROJECT_HOME/src/test/resources/
, bạn có thể truy cập nó trong một bài kiểm tra như vậy:
import scala.io.Source
// The string argument given to getResource is a path relative to
// the resources directory.
val source = Source.fromURL(getClass.getResource("/data.xml"))
Tất nhiên đó source
giờ chỉ là một đối tượng Scala IO bình thường để bạn có thể làm bất cứ điều gì bạn muốn với nó, như đọc nội dung và sử dụng nó cho dữ liệu thử nghiệm.
Có các phương pháp khác để có được tài nguyên là tốt (ví dụ như một luồng). Để biết thêm thông tin, hãy xem các getResource
phương thức trên Tài liệu Java: Class .
getClassLoader
là cần thiết. Không có nó, đường dẫn bao gồm thư mục phân cấp lớp của lớp kiểm tra. Một cái gì đó như ~/lighthouse/target/scala-2.12/test-classes/com/mycompany/myapp/module1/utils/blabla/
. Sử dụng getClass.getClassLoader.getResource()
phần com/mycompany/myapp/module1/utils/blabla/
này đã bị xóa
Một cách khác (đặc biệt nếu bạn cần truy cập tài nguyên dưới dạng a File
); là để có được đường dẫn của nó thông qua:
val path = getClass.getResource("/testData.txt").getPath
val file = new File(path)
như đã được chỉ ra trong Scala lấy đường dẫn tệp của tệp trong thư mục tài nguyên
sbt sao chép các tập tin từ src/test/resources
đến target/scala-[scalaVersion]/test-classes
.
Bạn có thể truy cập các tài nguyên trong các thử nghiệm của mình như sau:
Source.fromURL(getClass.getResource("/testData.txt"))
Nó không cho rằng đó testData.txt
là trực tiếp dưới thư mục src/test/resources
. Thêm bất kỳ thư mục con, nếu không.
Để biết bạn đang ở đâu trong hệ thống tệp trong khi kiểm tra, bạn có thể làm một cái gì đó như thế này trong một thử nghiệm giả:
import scala.collection.JavaConversions._
for(file <- new File(".").listFiles ){
println(file.getAbsolutePath)
}
Sau đó, khi bạn biết đường dẫn của mình, trong bài kiểm tra của bạn, bạn có thể sử dụng nó như:
new File("./src/test/resources/yourfile.xml")
src/test/resources
nằm trong CLASSPATH của kiểm tra để các kiểm tra có thể truy cập vào tệp mà không cần biết mã cấu trúc thư mục xây dựng.
getClassLoader
hướng dẫn. Kết quả làSource.fromURL(getClass.getClassLoader.getResource("simulation.json"))