Совершенно очевидно, что в качестве аргумента для test-only нужно передать один тест, чтобы вы могли делать то, что написано в документации: запускать один тест.

Но как это сделать? В java у вас, вероятно, есть класс UserTest, который расширяет WithApplication и определяет набор тестов для модели User (используя @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

Так как же запустить только один тест?

12
GreenAsJade 1 Янв 2014 в 06:39

2 ответа

Лучший ответ

Да, SBT поддерживает только гранулярность имени класса. Причина этого в том, что большинство поддерживаемых SBT фреймворков тестирования не используют один метод для каждого теста, они используют DSL для тестов, например, тесты specs2 выглядят так:

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

И на самом деле эти спецификации могут быть вложены сколь угодно глубоко, они могут иметь те же имена, что и друг друга, их можно параметризовать и повторно использовать произвольно и т. Д. До такой степени, что указание одного теста и понимание того, что он должен делать из командной строки, не не имеет смысла. Таким образом, SBT только что предоставил поддержку того, что имеет смысл во всех тестовых средах, и эту гранулярность имени класса.

10
James Roper 2 Янв 2014 в 20:33

Я нашел «ответ», которого я не ожидал.

Ты можешь сказать

Только тестовые модели.

И он будет "работать" ... то есть будет запускать "только" все эти тесты в UserTest (таким образом, не запускать все остальные тестовые классы, что в некоторой степени полезно).

Но, похоже, ты не можешь

Только тестовые модели.

Чтобы проверить только этот тест.

Ха!

1
GreenAsJade 1 Янв 2014 в 04:06