3

如何在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")
            }
        }
    }
}
@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)
}

现在我可以编写一个单元测试,但问题是用于该测试的数据库不干净,所以在每次测试之前我都必须清理它。我在想是否有任何内置数据库,以便测试类可以使用它,并且每次运行时,它都会给我一个新的干净数据库。如果有可能我可以修改路由,以便它采用接口/数据库,并且在应用程序中,我可以通过普通数据库和测试,我可以使用测试数据库。可能在 Android Room 中使用了非常相似的东西Room.inMemoryDatabaseBuilder

如果有人能一步一步地向我展示如何使用干净的模拟数据库进行此测试,而不需要每次在运行测试之前清理它,那就太好了。

4

0 回答 0