我正在尝试配置我的播放框架应用程序,以便它在运行时使用mysql数据库,并在内存数据库中进行测试。 当我运行测试时,它连接到mysql数据库而不是内存数据库。 谁知道为什么?
这是我的配置:
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/communityRoots?characterEncoding=UTF-8"
db.default.user=root
db.default.password= ""
db.test.driver=org.h2.Driver
db.test.url="jdbc:h2:mem:play;MODE=MYSQL"
db.test.user=sa
db.test.password=""
这是我的测试:
running(fakeApplication(inMemoryDatabase("test")), new Runnable() {
public void run() {
new User("bob@gmail.com", "Bob", "secret").save();
assertNotNull(User.authenticate("bob@gmail.com", "secret"));
assertNull(User.authenticate("bob@gmail.com", "badpassword"));
assertNull(User.authenticate("tom@gmail.com", "secret"));
}
});
答案 0 :(得分:1)
从我正在开发的实际应用程序:
import play.api.inject.bind
import org.scalatest.mock.MockitoSugar
import play.api.Application
import play.api.inject.guice.GuiceApplicationBuilder
import database.AccountDAO
import play.api.Configuration
import play.api.Mode
class AccountDAOSpec extends Specification with MockitoSugar { // we add mockito to show that you can also bind your mocks
val companyAccountDAOMock = mock[CompanyAccountDAO] // let us create a company account DAO mock
def app = new GuiceApplicationBuilder() // you create your app
.configure(
Configuration.from(
Map( // a custom configuration for your tests only
"slick.dbs.default.driver" -> "slick.driver.H2Driver$",
"slick.dbs.default.db.driver" -> "org.h2.Driver",
"slick.dbs.default.db.connectionPool" -> "disabled",
"slick.dbs.default.db.keepAliveConnection" -> "true",
"slick.dbs.default.db.url" -> "jdbc:h2:mem:test",
"slick.dbs.default.db.user" -> "sa",
"slick.dbs.default.db.password" -> "")))
.bindings(bind[AccountDAO].to[AccountDAOImpl]) // here you can define your bindings for an actual implementation (note the use of square brackets)
.bindings(bind[CompanyAccountDAO].to(companyAccountDAOMock)) // or bind to your mock (note the use of parentheses)
.in(Mode.Test)
.build()
"AccountDAO" should {
"throw an Exception when adding a user with an invalid data" in new WithApplication(app) { // here you can use the application you just created, it uses the db you defined for your tests
val app2dao = Application.instanceCache[AccountDAO]
val accountDAO = app2dao(app) // with this you get the DAO injected
accountDAO.addAccount(testAccount).run must throwAn[Exception]
}
}
}
答案 1 :(得分:0)
您应该删除“测试”。 因此,您的第一行应该是:
running(fakeApplication(inMemoryDatabase()), new Runnable() {
//test specific code
});