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"