Saya ingin menulis tes Spek di Kotlin. Tes harus membaca file HTML dari src/test/resources
folder. Bagaimana cara melakukannya?
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") {
...
}
}
}
})
this::class.java.classLoader.getResource("/html/file.html").readText()
/
di salah satunya, yang harus dihapus di opsi lain):this::class.java.getResource("/html/file.html").readText()
danthis::class.java.classLoader.getResource("html/file.html").readText()
val fileContent = javaClass.getResource("/html/file.html").readText()
melakukan pekerjaan lebih pendek lagisolusi lain yang sedikit berbeda:
@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) }
sumber
this
bagian itu tidak berhasil untuk saya. Karena itu saya merekomendasikan yang berikut ini:fun String.asResource(): URL? = object {}.javaClass.getResource(this)
this
pada contoh di atas mengacu pada objek string.Tidak tahu mengapa ini sangat sulit, tetapi cara paling sederhana yang saya temukan (tanpa harus merujuk ke kelas tertentu) adalah:
fun getResourceAsText(path: String): String { return object {}.javaClass.getResource(path).readText() }
Dan kemudian memasukkan URL absolut, mis
val html = getResourceAsText("/www/index.html")
sumber
{}
diperlukan? Kenapa tidakjavaClass.getResource(path).readText()
?Solusi yang sedikit berbeda:
class MySpec : Spek({ describe("blah blah") { given("blah blah") { var fileContent = "" beforeEachTest { html = this.javaClass.getResource("/html/file.html").readText() } it("should blah blah") { ... } } } })
sumber
/src/test/resources
,this.javaClass.getResource("/<test input filename>")
bekerja seperti yang diharapkan. Terima kasih atas solusi di atas.Kotlin + Cara musim semi:
@Autowired private lateinit var resourceLoader: ResourceLoader fun load() { val html = resourceLoader.getResource("classpath:html/file.html").file .readText(charset = Charsets.UTF_8) }
sumber
val fileContent = javaClass.getResource("/html/file.html").readText()
sumber
private fun loadResource(file: String) = {}::class.java.getResource(file).readText()
sumber
Menggunakan kelas Sumber Daya pustaka Google Guava :
import com.google.common.io.Resources; val fileContent: String = Resources.getResource("/html/file.html").readText()
sumber
Inilah cara yang saya lebih suka melakukannya:
fun getResourceText(path: String): String { return File(ClassLoader.getSystemResource(path).file).readText() }
sumber
Anda mungkin menemukan kelas File berguna:
import java.io.File fun main(args: Array<String>) { val content = File("src/main/resources/input.txt").readText() print(content) }
sumber