ScalaTest в sbt: есть ли способ запуска одного теста без тэгов?
Я знаю, что один тест можно запустить, запустив в sbt
testOnly *class -- -n Tag
Есть ли способ указать sbt/scalatest на запуск одного теста без тегов? Например:
testOnly *class -- -X 2
это будет означать "запустить второй тест в классе. Что бы это ни было". У нас есть куча тестов, и никто не удосужился пометить их, так есть ли способ запустить один тест без тега?
Ответы
Ответ 1
Теперь это поддерживается (начиная с ScalaTest 2.1.3) в интерактивном режиме:
testOnly *MySuite -- -z foo
запускать только тесты, имя которых включает подстроку "foo".
Для точного соответствия, а не подстроки, используйте -t
вместо -z
.
Ответ 2
Я хотел добавить конкретный пример, чтобы сопровождать другие ответы
Вам нужно указать имя класса, который вы хотите протестировать, поэтому, если у вас есть следующий проект (это проект воспроизведения):
![Play Project]()
Вы можете протестировать только тесты Login
, выполнив следующую команду с консоли SBT:
test:testOnly *LoginServiceSpec
Если вы используете команду извне консоли SBT, вы должны сделать следующее:
sbt "test:testOnly *LoginServiceSpec"
Ответ 3
Я не вижу способа запустить один непомеченный тест в тестовом классе, но я предоставляю свой рабочий процесс, так как он кажется полезным для всех, кто сталкивается с этим вопросом.
Из сеанса SBT:
test:testOnly *YourTestClass
(Звездочка является подстановочным знаком, вы можете указать полный путь com.example.specs.YourTestClass
.)
Все тесты в этом тестовом классе будут выполнены. Предположительно, вас больше всего волнуют неудачные тесты, поэтому исправьте все неудачные реализации и запустите:
test:testQuick
... который будет выполнять только те тесты, которые не пройдены. (Повтор самой последней выполненной команды test:testOnly
в этом случае будет таким же, как и test:testQuick
, но если вы разбите свои методы тестирования на соответствующие классы тестирования, вы можете использовать подстановочный знак, чтобы сделать test:testQuick
более эффективным способом выполнить неудачные тесты.)
Обратите внимание, что номенклатура для теста в ScalaTest - это класс теста, а не конкретный метод теста, поэтому все методы без тегов выполняются.
Если у вас слишком много тестовых методов в тестовом классе, разбейте их на отдельные классы или пометьте их соответствующим образом. (Это может быть сигналом того, что тестируемый класс нарушает принцип единой ответственности и может использовать рефакторинг.)
Ответ 4
Просто для упрощения примера Тайлера.
test:
-prefix не нужен.
Итак, согласно его примеру:
В sbt
-console:
testOnly *LoginServiceSpec
А в терминале:
sbt "testOnly *LoginServiceSpec"