我以为我已经暂时解决了这个问题,但事实证明我仍然有问题。
我正在尝试为我的模型层创建一些 specs2 测试,我想插入一些虚拟对象,然后运行一些查询以确保数据按预期输出。这是我的简单测试的样子:
类 ModelSpec 扩展规范 { 覆盖 def is = args(sequential = true) ^ super.is 对象 FakeApp 扩展了 FakeApplication() 运行(FakeApp){ println("建立数据库") val 新用户 = 用户( 电子邮件=“wfbarksdale@gmail.com”, 用户名 = "weezybizzle", 密码=“坚果黄油”) 用户保存(新用户) } 运行(FakeApp){ “用户模型”应该 { {中的“由用户名创建和检索” println("找人") User.findOneByUsername("weezybizzle") 必须是Some } {中的“找不到不存在的用户” println("找不到人") User.findOneByUsername("nobody") 必须是None } } } }
这是我从单元测试中获得的堆栈跟踪:
[信息] 将 1 个 Scala 源代码编译到 /www/mojulo3/target/scala-2.9.1/test-classes... 设置数据库 找人 找不到人 [信息] 模型规格 [信息] [信息] 用户模型应该 [错误] !由用户名创建和检索 [错误] IllegalStateException: 这个 Mongo 已经关闭 (DBTCPConnector.java:123) [错误] com.mongodb.DBTCPConnector._checkClosed(DBTCPConnector.java:123) [错误] com.mongodb.DBTCPConnector.call(DBTCPConnector.java:207) [错误] com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:313) [错误] com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:298) [错误] com.mongodb.DBCollection.findOne(DBCollection.java:682) [错误] com.mongodb.DBCollection.findOne(DBCollection.java:661) [错误] com.mongodb.casbah.MongoCollectionBase$class.findOne(MongoCollection.scala:225) [错误] com.mongodb.casbah.MongoCollection.findOne(MongoCollection.scala:897) [错误] com.novus.salat.dao.SalatDAO.findOne(SalatDAO.scala:311) [错误] models.User$.findOneByUsername(User.scala:24) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(ModelSpec.scala:29) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$3.apply(ModelSpec.scala:29) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2.apply(ModelSpec.scala:29) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$2.apply(ModelSpec.scala:27) [错误] !找不到不存在的用户 [错误] IllegalStateException: 这个 Mongo 已经关闭 (DBTCPConnector.java:123) [错误] com.mongodb.DBTCPConnector._checkClosed(DBTCPConnector.java:123) [错误] com.mongodb.DBTCPConnector.call(DBTCPConnector.java:207) [错误] com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:313) [错误] com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:298) [错误] com.mongodb.DBCollection.findOne(DBCollection.java:682) [错误] com.mongodb.DBCollection.findOne(DBCollection.java:661) [错误] com.mongodb.casbah.MongoCollectionBase$class.findOne(MongoCollection.scala:225) [错误] com.mongodb.casbah.MongoCollection.findOne(MongoCollection.scala:897) [错误] com.novus.salat.dao.SalatDAO.findOne(SalatDAO.scala:311) [错误] models.User$.findOneByUsername(User.scala:24) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6$$anonfun$apply$7.apply(ModelSpec.scala:35) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6$$anonfun$apply$7.apply(ModelSpec.scala:35) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6.apply(ModelSpec.scala:35) [错误] test.ModelSpec$$anonfun$3$$anonfun$apply$1$$anonfun$apply$6.apply(ModelSpec.scala:33) [信息] [信息] [信息] 规范 ModelSpec 的总计 [信息] 在 20 毫秒内完成 [信息] 2 个示例,0 个失败,2 个错误 [信息] [错误] 错误:总计 2,失败 0,错误 2,通过 0,跳过 0 [错误] 测试期间的错误: [错误] test.ModelSpec [错误] {file:/www/mojulo3/}mojulo3/test:test: 测试不成功 [错误] 总时间:4 秒,2012 年 8 月 28 日 10:02:33 PM 完成
看起来 FakeApp 以某种方式与数据库断开连接,而不是重新连接。我查看了播放源,似乎应用程序将停止并重新启动,无论它是否实际上是同一个对象。我认为这个问题可能源于salatonStop()
方法,或者onStart()
我不太确定。
我已经为此苦苦挣扎了一段时间,任何帮助,即使只是关于如何推理问题,将不胜感激。