我有一个ktor服务器,我正在尝试进行单元测试。然而,我找不到好的留档,我无法让它工作,我可能错过了一些东西,但我现在卡住了,它没有给出任何错误,但我不认为它在运行服务器。
import io.ktor.http.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.server.testing.*
import com.protecto.authorization.*
import com.typesafe.config.ConfigFactory
import io.ktor.client.*
import io.ktor.server.application.*
import io.ktor.server.config.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import org.junit.BeforeClass
import org.junit.Test
import org.junit.jupiter.api.AfterEach
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.MethodOrderer
import org.junit.jupiter.api.TestMethodOrder
@TestMethodOrder(MethodOrderer.OrderAnnotation::class)
class ApplicationTest {
private lateinit var client: HttpClient
companion object {
val engine = TestApplicationEngine(createTestEnvironment {
config = HoconApplicationConfig(ConfigFactory.load("application.conf"))
})
@BeforeClass
@JvmStatic
fun setup() {
println("TESTING IS READY TO BEGIN!")
engine.start(wait = false)
engine.application.module()
}
}
@BeforeEach
fun init() {
client = HttpClient()
}
@AfterEach
fun cleanup() {
client.close()
}
@Test
fun testSomething() = with(engine) {
with(handleRequest(HttpMethod.Get, "/")) {
assertEquals(HttpStatusCode.OK, this.response.status())
}
}
}
我只能说打印没有发生。
我想要的是运行服务器,然后执行测试。这是我现在所拥有的。断言为空且失败,没有有价值的日志:
您正在混合Junit4
和Junit5
注释。Junit5
的正确注释是@BeforeAll
:
import org.junit.jupiter.api.BeforeAll
class ApplicationTest {
companion object {
@BeforeAll
@JvmStatic
fun setup() {
println("We have all mixed Junit4 and Junit5 annotations by accident in the past.")
}
}
}
旧的(JUnit4)@BeforeClass和新的(JUnit5)@BeforeAll相似之处在于它们都只执行一次,在类中的任何测试之前。因此,即使您的类有10个测试,@BeforeAll方法也只会执行一次。
有关差异的更多详细信息,请参阅:stackoverflow.com/a/48137060/5037430