Как вы укажете один тест, который будет выполняться командой "только для тестов"
Довольно ясно, что нужно пройти один тест в качестве аргумента только для тестирования, чтобы вы могли делать то, что он говорит по документации: запустите один тест.
Но как вы это делаете? В 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
для проверки только одного теста.
Ха!