Chcę napisać test Speka w Kotlinie. Test powinien odczytać plik HTML z src/test/resources
folderu. Jak to zrobić?
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()
/
w jednej z nich, który trzeba usunąć w drugiej):this::class.java.getResource("/html/file.html").readText()
ithis::class.java.classLoader.getResource("html/file.html").readText()
val fileContent = javaClass.getResource("/html/file.html").readText()
wykonuje pracę jeszcze krócejinne nieco inne rozwiązanie:
@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) }
źródło
this
część nie działała dla mnie. Dlatego polecam:fun String.asResource(): URL? = object {}.javaClass.getResource(this)
this
w powyższym przykładzie odnosi się do obiektu ciągu.Nie mam pojęcia, dlaczego jest to takie trudne, ale najprostszy sposób, jaki znalazłem (bez konieczności odwoływania się do konkretnej klasy), to:
fun getResourceAsText(path: String): String { return object {}.javaClass.getResource(path).readText() }
A następnie przekazując bezwzględny adres URL, np
val html = getResourceAsText("/www/index.html")
źródło
{}
wymagane? Dlaczego nie po prostujavaClass.getResource(path).readText()
?Nieco inne rozwiązanie:
class MySpec : Spek({ describe("blah blah") { given("blah blah") { var fileContent = "" beforeEachTest { html = this.javaClass.getResource("/html/file.html").readText() } it("should blah blah") { ... } } } })
źródło
/src/test/resources
,this.javaClass.getResource("/<test input filename>")
działało zgodnie z oczekiwaniami. Dzięki za powyższe rozwiązanie.Kotlin + Spring Way:
@Autowired private lateinit var resourceLoader: ResourceLoader fun load() { val html = resourceLoader.getResource("classpath:html/file.html").file .readText(charset = Charsets.UTF_8) }
źródło
val fileContent = javaClass.getResource("/html/file.html").readText()
źródło
private fun loadResource(file: String) = {}::class.java.getResource(file).readText()
źródło
Korzystanie z klasy zasobów biblioteki Google Guava :
import com.google.common.io.Resources; val fileContent: String = Resources.getResource("/html/file.html").readText()
źródło
Oto sposób, w jaki wolę to robić:
fun getResourceText(path: String): String { return File(ClassLoader.getSystemResource(path).file).readText() }
źródło
Może się przydać klasa File:
import java.io.File fun main(args: Array<String>) { val content = File("src/main/resources/input.txt").readText() print(content) }
źródło