2

我编写了一个简单的存储库来使用 TestContainers 测试 Kotlin Exposed。我使用的数据库是mysql。

这是我的代码:

class StudentsRepositoryTest: ShouldSpec({
     val container = getMysqlContainer()
     val mysqlJdbcUrl = container.jdbcUrl

     beforeSpec {
        Database.connect(mysqlJdbcUrl, "com.mysql.cj.jdbc.Driver")
        transaction {
            SchemaUtils.create(Students)
        }
     }

     ... // some tests


     private fun getMysqlContainer(): MySQLContainer<Nothing> {
       return MySQLContainer<Nothing>("mysql:5.7").apply {
          withUsername("root")
          withPassword("")
          withEnv("MYSQL_ROOT_PASSWORD", "%")
          withDatabaseName("test")
          start()
      }
}
 

代码在beforeSpec

Access denied for user ''@'172.17.0.1' (using password: NO)

也许我错过了一些东西,任何帮助将不胜感激

我使用的库:

  • 测试
  • kotest 扩展测试容器
  • 测试容器
  • 测试容器-mysql
4

1 回答 1

2

我终于找到了我的问题的答案。原因是我忘记将用户名和密码传递给与 Exposed 库的连接。

val mysqlJdbcUrl = container.jdbcUrl
val username = container.username
val password = container.password
Database.connect(mysqlJdbcUrl, "com.mysql.cj.jdbc.Driver", username, password)
于 2020-09-18T15:48:12.913 回答