2017-03-11 14 views
11

Ich möchte einen Spek Test in Kotlin schreiben. Der Test sollte eine HTML-Datei aus dem Ordner src/test/resources lesen. Wie es geht?Wie lese ich eine Textdatei von Ressourcen in 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") { 
       ... 
      } 
     } 
    } 
}) 

Antwort

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

Für mich nicht funktionierte, hatte ich es zu ändern, um 'dies: : class.java.classLoader.getResource ("/ html/file.html"). readText() ' – pk1914

+0

Für mich funktionierten beide Optionen in einer Android App (beachten Sie die zusätzlichen'/'in einem von ihnen, w das muss in der anderen entfernt werden): 'this :: class.java.getResource ("/html/file.html "). readText()' und 'this :: class.java.classLoader.getResource (" html/file.html "). readText()' – Franco

8

Eine etwas andere Lösung:

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

Aus irgendeinem Grund funktionierte das nicht für mich. Nur das explizite Aufrufen der Klasse hat funktioniert. Einfach für andere hinzufügen. Ich denke, es hat etwas mit tornadofx zu tun – nmu

+0

Nach dem Erstellen einer Test-Eingabedatei in '/ src/test/resources',' this.javaClass.getResource ("/ ") 'arbeitete wie erwartet. Danke für die obige Lösung. – jkwuc89

6

andere etwas andere Lösung:

@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) 
} 
Verwandte Themen