Я хочу написать тест Spek на Котлине. Тест должен прочитать HTML-файл из src/test/resources
папки. Как это сделать?
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()
/
в одном из них, которое нужно удалить в другом):this::class.java.getResource("/html/file.html").readText()
иthis::class.java.classLoader.getResource("html/file.html").readText()
val fileContent = javaClass.getResource("/html/file.html").readText()
делает работу еще корочееще одно немного другое решение:
@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) }
источник
this
деталь у меня не подошла. Таким образом, я рекомендую следующее:fun String.asResource(): URL? = object {}.javaClass.getResource(this)
this
в приведенном выше примере относится к строковому объекту.Понятия не имею, почему это так сложно, но самый простой способ, который я нашел (без ссылки на конкретный класс):
fun getResourceAsText(path: String): String { return object {}.javaClass.getResource(path).readText() }
А затем передать абсолютный URL-адрес, например
val html = getResourceAsText("/www/index.html")
источник
{}
требуется? Почему не просто такjavaClass.getResource(path).readText()
?Немного другое решение:
class MySpec : Spek({ describe("blah blah") { given("blah blah") { var fileContent = "" beforeEachTest { html = this.javaClass.getResource("/html/file.html").readText() } it("should blah blah") { ... } } } })
источник
/src/test/resources
,this.javaClass.getResource("/<test input filename>")
работал, как ожидалось. Спасибо за решение выше.Котлин + Весенний способ:
@Autowired private lateinit var resourceLoader: ResourceLoader fun load() { val html = resourceLoader.getResource("classpath:html/file.html").file .readText(charset = Charsets.UTF_8) }
источник
val fileContent = javaClass.getResource("/html/file.html").readText()
источник
private fun loadResource(file: String) = {}::class.java.getResource(file).readText()
источник
Использование класса ресурсов библиотеки Google Guava :
import com.google.common.io.Resources; val fileContent: String = Resources.getResource("/html/file.html").readText()
источник
Я предпочитаю это делать так:
fun getResourceText(path: String): String { return File(ClassLoader.getSystemResource(path).file).readText() }
источник
Вам может пригодиться класс File:
import java.io.File fun main(args: Array<String>) { val content = File("src/main/resources/input.txt").readText() print(content) }
источник