我想在Kotlin写一个Spek测试。测试应该从src/test/resources
文件夹中读取HTML文件。怎么做?
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") {
...
}
}
}
})
答案 0 :(得分:68)
#import numpy as np
def impl(i,row):
if row:
uH = u[:][:] # this copys the array 'u'
for j in range(1, xmax-1):
u[i][j] = a*uH[i][j-1]+(1-2*a)*uH[i][j]+a*uH[i][j+1]
u[i][0] = u[i][0]/b
for x in range(1, xmax):
u[i][x] = (u[i][x]+a*u[i][x-1])/(b+a*c[x-1])
for x in range(xmax-2,-1,-1):
u[i][x]=u[i][x]-c[x]*u[i][x+1]
else:
uH = u[:][:] # this copys the array 'u'
for j in range(1, xmax-1):
u[j][i]= a*uH[j-1][i]+(1-2*a)*uH[j][i]+a*uH[j+1][i]
u[0][i] = u[0][i]/b
for y in range(1, xmax):
u[y][i] = (u[y][i]+a*u[y-1][i])/(b+a*c[y-1])
for y in range(xmax-2,-1,-1):
u[y][i]=u[y][i]-c[y]*u[y+1][i]
#Init
xmax = 101
tmax = 2000
D = 0.5
l = 1
tSec = 0.1
uH = [[0.0]*xmax]*xmax #np.zeros((xmax,xmax))
u = [[0.0]*xmax]*xmax #np.zeros((xmax,xmax))
dx = l / xmax
dt = tSec / tmax
a = (D*dt)/(dx*dx);
b=1+2*a
print("dx=="+str(dx))
print("dt=="+str(dt))
print(" a=="+str(a))
#koeficient c v trojdiagonalnej matici
c = [-a]*xmax #np.full(xmax,-a)
c[0]=c[0]/b
for i in range(1, xmax):
c[i]=c[i]/(b+a*c[i-1])
uH[50][50] = 10000
u = uH
for t in range(1, tmax):
if t % 2 == 0:
for i in range(0,xmax):
impl(i,False)
else:
for i in range(0, xmax):
impl(i,True)
答案 1 :(得分:21)
另一个稍微不同的解决方案:
@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)
}
答案 2 :(得分:11)
略有不同的解决方案:
class MySpec : Spek({
describe("blah blah") {
given("blah blah") {
var fileContent = ""
beforeEachTest {
html = this.javaClass.getResource("/html/file.html").readText()
}
it("should blah blah") {
...
}
}
}
})
答案 3 :(得分:11)
不知道为什么这么难,但是我发现的最简单的方法(无需引用特定的类)是
fun getResourceAsText(path: String): String {
return object {}.javaClass.getResource(path).readText()
}
然后传入一个绝对URL,例如
val html = getResourceAsText("/www/index.html")
答案 4 :(得分:5)
private fun loadResource(file: String) = {}::class.java.getResource(file).readText()
答案 5 :(得分:2)
这是我更喜欢的方式:
fun getResourceText(path: String): String {
return File(ClassLoader.getSystemResource(path).file).readText()
}
答案 6 :(得分:1)
科特林+春季之路:
@Autowired
private lateinit var resourceLoader: ResourceLoader
fun load() {
val html = resourceLoader.getResource("classpath:html/file.html").file
.readText(charset = Charsets.UTF_8)
}
答案 7 :(得分:1)
这个顶级 kotlin 函数将在任何情况下完成这项工作
fun loadResource(path: String): URL {
return Thread.currentThread().contextClassLoader.getResource(path)
}
或者如果你想要一个更健壮的功能
fun loadResource(path: String): URL {
val resource = Thread.currentThread().contextClassLoader.getResource(path)
requireNotNull(resource) { "Resource $path not found" }
return resource
}
答案 8 :(得分:0)
val fileContent = javaClass.getResource("/html/file.html").readText()
答案 9 :(得分:0)
您可能会发现File类很有用:
import java.io.File
fun main(args: Array<String>) {
val content = File("src/main/resources/input.txt").readText()
print(content)
}
答案 10 :(得分:0)
使用Google Guava库Resources class:
import com.google.common.io.Resources;
val fileContent: String = Resources.getResource("/html/file.html").readText()
答案 11 :(得分:0)
仅供参考:在上述所有情况下。 getResource()
是使用 nullable 的不安全方式。
没有在本地尝试过,但我更喜欢这种方式:
fun readFile(resourcePath: String) = String::class.java.getResource(resourcePath)?.readText() ?: "<handle default. or handle custom exception>"
甚至作为自定义数据类型函数
private fun String.asResource() = this::class.java.getResource(resourcePath)?.readText() ?: "<handle default. or handle custom exception>"
然后你可以直接在路径上调用:
// For suppose
val path = "/src/test/resources"
val content = path.asResource()