2

有没有办法从 Specs 2 运行特定测试Specification?例如,如果我有以下情况:

class FooSpec extends Specification {
  "foo" should {
    "bar" in {
      // ...
    }

    "baz" in {
      // ...
    }
  }
}

我想有一种只运行的方法FooSpec > "foo" > "bar"(在这里使用一些任意符号)。

4

2 回答 2

5

你可以使用exsbt 的参数来运行一个特定的例子:

sbt> test-only *FooSpec* -- ex bar

您还可以混合org.specs2.mutable.Tags特征并包含特定标签:

sbt> test-only *FooSpec* -- include investigate

class FooSpec extends Specification with Tags {
  "foo" should {
    tag("investigate")
    "bar" in {
      // ...
    }
    "baz" in {
       // ...
     }
   }
}

您也可以重新运行以前失败的示例,无论它们是什么

sbt> test-only *FooSpec* -- was x

最后,在下一个 2.0 版本(或使用最新的 1.15-SNAPSHOT)中,您将能够创建script.Specification并使用“自动编号的示例组”:

import specification._

/**
 * This kind of specification has a strict separation between the text 
 * and the example code
 */ 
class FooSpec extends script.Specification with Groups { def is = s2"""
  This is a specification for FOO

  First of all, it must do foo
  + with bar
  + with baz

  """ 

  "foo" - new group {
    eg := "bar" must beOk
    eg := "baz" must beOk
  }
}

// execute all the examples in the first group
sbt> test-only *FooSpec* -- include g1

// execute the first example in the first group
sbt> test-only *FooSpec* -- include g1.e1

但是,无法使用可变规范指定您要运行示例"foo" / "bar"。这可能是将来要添加的功能。

于 2013-05-08T14:28:10.327 回答
1

您可以选择要执行的测试的命名空间,但 AFAIK 无法从sbt console. 您可以执行以下操作:

sbt test:compile "test-only FooSpec.*",它只从FooSpec命名空间运行测试,但是这个选择是基于命名空间的,甚至不能正常工作。这是选择机制,但它以某种方式失败并且总是运行在您的项目中找到的整个测试集。

更新

官方文档

test-only

仅测试任务接受以空格分隔的测试名称列表以运行。例如:

test-only org.example.MyTest1 org.example.MyTest2

它也支持通配符:

test-only org.example.*Slow org.example.MyTest1
于 2013-05-08T10:20:27.037 回答