2017-03-11 21 views
11

Tôi muốn viết một bài kiểm tra Spek ở Kotlin. Bài kiểm tra nên đọc một tệp HTML từ thư mục src/test/resources. Làm thế nào để làm nó?Cách đọc tệp văn bản từ tài nguyên trong Kotlin?

class MySpec : Spek({ 

    describe("blah blah") { 

     given("blah blah") { 

      var fileContent : String = "" 

      beforeEachTest { 
       // How to read the file file.html in src/test/resources/html 
       fileContent = ... 
      } 

      it("should blah blah") { 
       ... 
      } 
     } 
    } 
}) 

Trả lời

20
val fileContent = MySpec::class.java.getResource("/html/file.html").readText() 
+3

Đối với tôi điều này không làm việc, tôi đã phải thay đổi nó cho 'này: : class.java.classLoader.getResource ("/ html/file.html"). readText() ' – pk1914

+0

Đối với tôi cả hai tùy chọn này đều hoạt động trong một ứng dụng Android (chú ý phần bổ sung'/'trong một trong số chúng, w hich phải được loại bỏ trong phần còn lại): 'this :: class.java.getResource ("/html/file.html "). readText()' và 'this :: class.java.classLoader.getResource (" html/file.html "). ‌ readText()' – Franco

8

Một giải pháp hơi khác nhau:

class MySpec : Spek({ 
    describe("blah blah") { 
     given("blah blah") { 

      var fileContent = "" 

      beforeEachTest { 
       html = this.javaClass.getResource("/html/file.html").readText() 
      } 

      it("should blah blah") { 
       ... 
      } 
     } 
    } 
}) 
+0

Vì một số lý do, điều này không hiệu quả đối với tôi. Chỉ gọi một cách rõ ràng lớp đã làm việc. Chỉ cần thêm cho người khác. Tôi nghĩ rằng nó có liên quan gì đó với tornadofx – nmu

+0

Sau khi tạo một tệp đầu vào thử nghiệm trong '/ src/test/resources',' this.javaClass.getResource ("/ ") 'hoạt động như mong đợi. Cảm ơn các giải pháp trên. – jkwuc89

6

một giải pháp hơi khác nhau:

@Test 
fun basicTest() { 
    "/html/file.html".asResource { 
     // test on `it` here... 
     println(it) 
    } 

} 

fun String.asResource(work: (String) -> Unit) { 
    val content = this.javaClass::class.java.getResource(this).readText() 
    work(content) 
} 
Các vấn đề liên quan