我们在内存中使用hdsqldb来运行针对数据库运行的junit测试.在通过弹簧配置运行每个测试之前设置db.一切正常.现在,当测试失败时,可以方便地检查内存数据库中的值.这可能吗?如果是这样的话?我们的网址是:
jdbc.url = JDBC:HSQLDB:MEM:TESTDB; sql.enforce_strict_size =真
每次测试后都会销毁数据库.但是当调试器运行时,数据库也应该仍然存在.我尝试连接sqldb databaseManager.这工作,但我没有看到任何表或数据.任何帮助都非常感谢!
我正在尝试编写一个函数,当它们以通用方式包装在Option中时,重用我对Object A - > Object B的隐式转换,以便Option [A] - > Option [B]转换也工作.
我想出的是:
implicit def fromOptionToOption[A, B](from: Option[A])(implicit conversion: (A) => B): Option[B] = from.map(conversion(_))
Run Code Online (Sandbox Code Playgroud)
当我将一个(..)分配给一个值而不是当我分配一个Option val时,这是有效的; 请参阅以下控制台输出:
scala> trait T
defined trait T
scala> case class Foo(i: Int) extends T
defined class Foo
scala> case class Bar(i: Int) extends T
defined class Bar
scala> implicit def fromFooToBar(f: Foo):Bar = Bar(f.i)
fromFooToBar: (f: Foo)Bar
scala> implicit def fromBarToFoo(b: Bar):Foo = Foo(b.i)
fromBarToFoo: (b: Bar)Foo
scala> implicit def fromOptionToOption[A, B](from: Option[A])(implicit conversion: …Run Code Online (Sandbox Code Playgroud) SBT有一个很好的钩子,允许你在所有测试运行后执行任意代码:
testOptions in Test += Tests.Cleanup( () => println("Cleanup"))
Run Code Online (Sandbox Code Playgroud)
这样可行.我的问题是:我想做一些实际的清理(例如停止一些服务)但我无法导入我在同一个构建文件中声明的任何依赖项.有没有办法做到这一点?我想我需要将这些放在sbt类路径或其他东西上,但我似乎无法在文档中找到它.
PS我可能在错误的位置执行此操作,是否有更好的地方在所有测试运行后关闭事物?)
我们使用quartz(java API)进行作业调度.这很好用.现在我试图用它来概括一些事情.quartz api需要一个作业类作为参数来扩展Job接口.这使得通过构造函数传递参数变得不可能.
我们有一组作业应该都一样,执行检查,如果是,则调用一个动作,例如:
class SimpleJob extends Job {
def execute(context: JobExecutionContext) {
val check = classOf[SimpleCheck].asInstanceOf[Class[Check]].newInstance()
val result = check.execute(context.getJobDetail.getJobDataMap)
if (result.shouldInvokeAction) {
Action(result).execute
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过调用实例化石英作业:
newJob(classOf[SimpleJob]).with...
Run Code Online (Sandbox Code Playgroud)
这有效.
目标是为不同类型的检查重用这个逻辑问题:我可以使用scala类型系统,我可以使用一个类型的JobClass,可以重复使用它来执行Check的任何子类吗?
我想出了以下解决方案:
class GenericJobRule[J <: Check](implicit m: Manifest[J]) extends Job {
def execute(context: JobExecutionContext) {
val check = m.erasure.newInstance().asInstanceOf[J]
val result = check.execute(context.getJobDetail.getJobDataMap)
if (result.shouldInvokeAction) {
Action(result).execute
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在可以像这样实例化一个作业:
newJob(classOf[GenericJobRule[PerformanceCheck]])
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我认为实例化和转换类型绕过了类型检查的整个想法.有没有更好的方法来做到这一点?也许我们应该重新考虑我们的设计......
谢谢,艾伯特
我想建立一个像这样的地图:
def one = "one"
def two = "two"
def three = Some("three")
Map[String, String]("one" -> one, "two" -> two, "three" -> three)
Run Code Online (Sandbox Code Playgroud)
这将无法编译,因为方法三返回Option而不是String.我可以这样做:
Map[String, String]("one" -> one, "two" -> two) ++ three.map(t => Map("three" -> t)).getOrElse(Map.empty[String, String])
Run Code Online (Sandbox Code Playgroud)
现在它只会在列表中添加选项.
但必须有一种更优雅的方式.(例如,lift-json知道如何在构造JValue时过滤掉Options).
有什么建议?(PS我在这里简化了问题)