如何使用Play框架的“test-only”命令指定运行单个测试?

12

很明显,人们希望将单个测试作为参数传递给“test-only”,以便按照文档所说运行一个测试。

但是如何做到这一点呢?在Java中,您可能有一个类UserTest,它扩展了WithApplication并定义了对用户模型进行一堆测试(每个使用@Test)。

您想要这样说:

test-only models.UserTest.createAUser

但仅限测试才能告诉您

[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for test:testOnly
[success] Total time: 0 s

那么如何只运行一个测试?

2个回答

10

是的,SBT仅支持类名粒度。原因是SBT支持的大多数测试框架不使用每个测试方法一次,而是使用测试DSL,例如specs2测试看起来像这样:

"The plus sign" should {
  "add two numbers" in {
    2 + 3 === 5
  }
  "be communatative" in {
    1 + 2 === 2 + 1
  }
}

事实上,这些规范可以任意嵌套,它们可以与彼此具有相同的名称,可以进行参数化和任意重复使用,等等,直到指定单个测试并从命令行理解该测试应做什么都没有意义。因此,SBT仅提供了对所有测试框架有意义的支持,即类名粒度。


好的,谢谢!我可能会尝试找一些文档,以便更新这个提示! - GreenAsJade
1
这是我见过的对于为什么存在这个限制的最好解释。谢谢詹姆斯,我一直在想为什么这个限制存在已经有一段时间了! - torbinsky

1
我发现的答案并不是我期望的。
你可以说
test-only models.UserTest
它将"工作"...也就是说,它将只运行UserTest中的所有测试(因此不运行每个其他测试类,这在某种程度上很有帮助)。
但似乎你不能这样做
test-only models.UserTest.createAUser 只测试那一个测试用例。
哎呀!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接