从规范运行单个测试

时间:2013-05-08 09:55:41

标签: unit-testing scala specs2

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

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

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

我想有办法只运行FooSpec > "foo" > "bar"(在这里使用一些任意表示法)。

2 个答案:

答案 0 :(得分:5)

您可以使用sbt中的ex参数来运行特定示例:

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"。这可能是将来添加的功能。

答案 1 :(得分:1)

您可以选择要执行的测试的命名空间,但是AFAIK无法从sbt console运行特定的测试。你可以这样做:

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

<强>更新

来自official documentation

test-only

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

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

它也支持通配符:

test-only org.example.*Slow org.example.MyTest1