Eu sei que um único teste pode ser executado executando, em sbt,
testOnly *class -- -n Tag
Existe uma maneira de dizer ao sbt / scalatest para executar um único teste sem tags? Por exemplo:
testOnly *class -- -X 2
significaria "executar o segundo teste da classe. Seja o que for". Temos vários testes e ninguém se deu ao trabalho de identificá-los. Existe uma maneira de executar um único teste sem que ele tenha um identificador?
sbt
entre aspas , por exemplosbt "test-only *SingleTestSuite"
Respostas:
Agora isso é suportado (desde o ScalaTest 2.1.3) no modo interativo:
para executar apenas os testes cujo nome inclui a substring "foo".
Para correspondência exata em vez de substring, use em
-t
vez de-z
.fonte
-t
para a correspondência exata? Não consigo fazê-lo funcionar.src/it
), eles precisam precederit
atestOnly
. Por exemplo, na linha de comando:sbt "it:testOnly *MyIntegrationTestSuite"
.when
eshould
podem se repetir entre os testes. Para escolher um teste específico, preciso dizer "o nome contém isto e aquilo".Eu queria adicionar um exemplo concreto para acompanhar as outras respostas
Você precisa especificar o nome da classe que deseja testar, portanto, se você tiver o seguinte projeto (este é um projeto do Play):
Você pode testar apenas os
Login
testes executando o seguinte comando no console do SBT:Se você estiver executando o comando fora do console do SBT, faça o seguinte:
fonte
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
e fora:sbt "testOnly *LoginServiceSpec"
Não vejo uma maneira de executar um único teste não marcado dentro de uma classe de teste, mas estou fornecendo meu fluxo de trabalho, pois parece útil para qualquer pessoa que se deparar com essa pergunta.
De dentro de uma sessão sbt:
(O asterisco é um curinga, você pode especificar o caminho completo
com.example.specs.YourTestClass
.)Todos os testes nessa classe de teste serão executados. Presumivelmente, você está mais preocupado com falhas nos testes, portanto, corrija quaisquer implementações com falha e execute:
... que executará apenas testes que falharam. (Repetir o
test:testOnly
comando executado mais recentemente será o mesmo quetest:testQuick
neste caso, mas se você dividir seus métodos de teste em classes de teste apropriadas, poderá usar um curinga para criartest:testQuick
uma maneira mais eficiente de executar novamente os testes com falha.)Observe que a nomenclatura para teste no ScalaTest é uma classe de teste, não um método de teste específico; portanto, todos os métodos sem marcação são executados.
Se você tiver muitos métodos de teste em uma classe de teste, divida-os em classes separadas ou identifique-os adequadamente. (Isso pode ser um sinal de que a classe em teste está violando o princípio de responsabilidade única e pode usar uma refatoração.)
fonte
*YourTestClass
deve ser o nome da classe. Não é o nome do arquivo.Apenas para simplificar o exemplo de Tyler.
test:
-prefix não é necessário.Então, de acordo com o exemplo dele:
No
sbt
console:E no terminal:
fonte
Aqui está a página do Scalatest sobre o uso do corredor e a discussão estendida sobre as opções
-t
e-z
.Esta postagem mostra quais comandos funcionam para um arquivo de teste que usa
FunSpec
.Aqui está o arquivo de teste:
Este comando executa os quatro testes no
iLike
bloco de descrição (na linha de comando do SBT):Você também pode usar aspas, assim também funcionará:
Isso executará um único teste:
Isso executará os dois testes que começam com "funciona com":
Não consigo a
-t
opção de executar nenhum teste noCardiBSpec
arquivo. Este comando não executa nenhum teste:Parece que a
-t
opção funciona quando os testes não são aninhados emdescribe
blocos. Vamos dar uma olhada em outro arquivo de teste:-t
pode ser usado para executar o único teste:-z
também pode ser usado para executar o teste único:Consulte este repositório se desejar executar esses exemplos.
fonte