4

我正在使用 ScalaTest 集成测试 Play Framework 应用程序。这:
org.scalatest.Suites(list-of-specifications)
执行list-of-specifications中的每个测试。但是我怎样才能避免每个规范也被独立执行呢?他们被处决了两次。

一个例子:

import org.scalatest.{Suites, FreeSpec}

class BrowserSuiteSpec extends Suites(new AnonLoginSpec)
class AnonLoginSpec extends FreeSpec { ... }

现在 myAnonLoginSpec被执行了两次——首先是 BrowserSuiteSpec 的一部分,然后是独立的,因为它是一个 FreeSpec 类。(更改AnonLoginSpec为 trait 会导致编译错误。)

重命名AnonLoginSpecAnonLoginSpeX没有任何效果——它仍然被执行了两次。 (我想也许 ScalaTest 正在寻找“Spec”后缀,我认为 Specs2 确实如此。)

文档没有提到这个问题(据我所知)。

4

2 回答 2

7

如果您使用的是 ScalaTest 2.0.M5 或更高版本,则可以使用@DoNotDiscover注释每个套件。或者,您可以绕过发现并通过将 -s MainSuite 传递给 ScalaTest 运行器来指定主套件类名称。

于 2012-12-29T15:27:47.127 回答
2

如果您使用的是 2.0-M5 之前的版本,那么您可以简单地声明规范abstract,然后 ScalaTest 会忽略它。所以我这样做了:(它有效;测试仅在Suites构造内部运行)

class BrowserSuiteSpec extends Suites(new AnonLoginSpec {})

abstract class AnonLoginSpec extends FreeSpec { ... }

(无论如何我都接受了mpilquist的回答(见上文),因为这就是 2.0 版中的工作方式。)

于 2012-12-29T16:02:55.957 回答