scala - Play 上的代码覆盖率!项目

标签 scala playframework-2.0 code-coverage sbt scct

我有戏!我想在其中添加一些代码覆盖率信息的项目。到目前为止,我已经尝试过 JaCoCoscct .前者存在基于字节码的问题,因此它似乎对 Scala 编译器自动生成的方法缺少测试给出警告,例如 copycanEqual . scct 似乎是一个更好的选择,但无论如何我在测试期间都会遇到很多错误。

让我坚持使用 scct。对于尝试连接到数据库的每个测试,我基本上都会出错。我的许多测试将一些装置加载到内存中的 H2 数据库中,然后进行一些断言。我的 Global.scala包含

override def onStart(app: Application) {
    SessionFactory.concreteFactory = Some(() => connection)

    def connection() = {
        Session.create(DB.getConnection()(app), new MySQLInnoDBAdapter)
    }
}

而测试通常包含在一个块中
class MySpec extends Specification {
    def app = FakeApplication(additionalConfiguration = inMemoryDatabase())

    "The models" should {
        "be five" in running(app) {
            Fixtures.load()
            MyModels.all.size should be_==(5)
        }
    }
}

线路running(app)允许我在连接到内存数据库的工作应用程序的上下文中运行测试,至少通常是这样。但是当我运行代码覆盖任务时,比如 scct coverage:doc , 我得到一个 拍品 与连接到数据库相关的错误。

更奇怪的是,至少有 4 个不同的错误,例如:
  • ObjectExistsException: 缓存 Play 已经存在
  • SQLException: 试图从已关闭的池中获取连接
  • 配置错误 [无法连接到数据库 [默认]]
  • 找不到适合 jdbc:h2:mem:play-test--410454547
  • 的驱动程序

    Why is that launching tests in the default configuration is able to connect to the database, while running in the context of scct (or JaCoCo) fails to initialize the cache and the db?

    最佳答案

    specs2 测试默认并行运行。 Play 禁用标准单元测试配置的并行执行,但 scct 使用不同的配置,因此它不知道不并行运行。

    尝试将其添加到您的 Build.scala 中:

    .settings(parallelExecution in ScctPlugin.ScctTest := false)
    

    或者,您可以添加 sequential到测试类的开头,以强制所有可能的运行配置按顺序运行。我的文件中仍然有两个,因为我认为当我使用 Play 的早期发布候选版本时,我曾在 Build.scala 解决方案上遇到了一些问题。

    关于scala - Play 上的代码覆盖率!项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14505229/

    相关文章:

    "require_once"语句的 PHPUnit 代码覆盖率

    http - Play Framework - 如何重定向到插件 Controller 生成的页面? [安全社交]

    scala - 将列表拆分为列表列表

    Scala 高级类型语法

    github - 类型安全堆栈未获取项目模板 - 从 github 获取异常异常响应代码 : 403

    android - 如何管理从调用 Play2!-Scala REST 服务的 native 移动应用程序发送的用户请求的身份验证/授权

    code-coverage - Coverall branches [[0,0]] missed 是什么意思?

    java - 范围类 : java interoperability

    playframework - Play 框架、Ebean 和 Akka Promise

    python - 忽略覆盖率报告中的空文件