Как вы укажете один тест, который будет выполняться командой "только для тестов"

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

Но как вы это делаете? В 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

Итак, как вы запускаете только один тест?

Ответ 1

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

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

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

Ответ 2

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

Вы можете сказать

модели только для тестирования .UserTest

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

Но, похоже, вы не можете сделать

модели только для тестирования .UserTest.createAUser

для проверки только одного теста.

Ха!