kto*_*ion 5 unit-testing kotlin ktor kmongo
如何使用Ktorwith进行单元测试KMongo?如何模拟数据库并对其进行测试?假设我制作了最简单的 API,如下所示:
private val client = KMongo.createClient().coroutine
private val database = client.getDatabase("dbName")
val people = database.getCollection<Person>()
suspend fun addPerson(person: Person): Boolean =
people.insertOne(person).wasAcknowledged()
fun Route.addPersonRouting()
{
route("/add")
{
post {
if (addPerson(Person("Name", "Surname")))
{
call.respond(HttpStatusCode.OK, "ADDED")
}
else
{
call.respond(HttpStatusCode.OK, "NOT ADDED")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
@Test
fun `add person successfully`() = withTestApplication(
{
install(ContentNegotiation){ json() }
routing { addPersonRouting() }
}
) {
val c = handleRequest(HttpMethod.Post, "/add")
assertEquals(HttpStatusCode.OK, c.response.status())
assertEquals("ADDED", c.response.content)
}
Run Code Online (Sandbox Code Playgroud)
现在我可以编写一个单元测试,但问题是用于此测试的数据库不干净,因此在每次测试之前我必须清理它。我在想是否有任何内置数据库,以便测试类可以使用它,并且每次运行时,它都会为我提供一个新的干净数据库。如果可能的话,我可以修改路由,以便它需要接口/数据库,并且在应用程序中,我可以传递普通数据库并进行测试,我可以使用测试数据库。Android Room 中可能使用了非常相似的东西Room.inMemoryDatabaseBuilder。
如果有人能逐步向我展示如何使用干净的模拟数据库进行此测试,而无需每次在运行测试之前都对其进行清理,那就太好了。
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |