Pulando testes — @Skip e SKIPASSERT
Pular testes deve ser evitado — um teste existe para forçar correções. Mas há situações legítimas: pendências fora da sua gerência, comportamentos que variam por versão do AppServer/tlppCore, sistema operacional ou banco de dados. Para esses casos, o PROBAT oferece o "pulo" registrado: o teste não quebra o plano, mas é exportado como skipped — o salto fica visível nos resultados.
Há duas granularidades: pular a função, classe ou método inteiro (@Skip) ou pular apenas o próximo assert (SKIPASSERT).
@Skip() — pula função, classe ou método
Independentemente de quantos asserts existam no escopo, o PROBAT registra um único salto, referenciando a função, classe ou método (não o conteúdo):
// Em função
@TestFixture(owner='sample')
@Skip()
function U_test_function_Skip()
assertError( 'nao deve registrar esse assert' )
return .T.
// Em classe inteira
@TestFixture()
@Skip()
class test_class_skip
// ...
endclass
// Em método de classe
@Test('Exemplo para uso do PROBAT. SKIP ')
@Skip()
public method ExampleForUseSkip()
SKIPASSERT — pula somente o próximo assert
Comando inserido no fonte logo antes do assert. O pulo vale apenas para o próximo assert executado — os asserts seguintes rodam normalmente. O salto é registrado referenciando o assert pulado:
@TestFixture()
user function test_sample_skip_assert()
local cVar := "" as character
local nVar := 0 as numeric
local fVar as decimal
assertEquals( valtype(cVar), "C" ) // registra
SKIPASSERT // pula somente o proximo assert executado
assertEquals( valtype(fVar), "F" ) // pula
assertEquals( valtype(nVar), "N" ) // registra
return .T.
Funciona em funções e em métodos de classe.
Skip condicional (filtros)
Tanto @Skip quanto SKIPASSERT aceitam seis filtros — o teste só é pulado quando a condição casa com o ambiente:
| Filtro | Annotation | Comando | Disponível desde |
|---|---|---|---|
| Sistema operacional | @Skip( system="windows" ) | SKIPASSERT SYSTEM "linux" | — |
| Versão tlppCore | @Skip( tlppVersion=">= 01.02.12" ) | SKIPASSERT TLPPVERSION "< 01.02.12" | — |
| Versão AppServer | @Skip( appServerVersion=">= 19.3.1.7" ) | SKIPASSERT APPSERVERVERSION "19.3.1.5" | — |
| Nome AppServer | @Skip( appServerName="HARPIA" ) | SKIPASSERT APPSERVERNAME "LOBO-GUARA" | — |
| Banco de dados | @Skip( database="MSSQL" ) | SKIPASSERT DATABASE "MSSQL" | 01.04.10 |
| Função customizada | @Skip( custom="U_customSkip" ) | SKIPASSERT CUSTOM "U_customSkip" | 01.04.10 |
As versões aceitam operadores de comparação na própria string: "01.02.10" (igual), "< 01.02.12" (abaixo de), ">= 01.02.12" (a partir de).
Exemplos com annotation
@TestFixture(owner='sample')
@Skip(tlppVersion=">= 01.02.10")
function U_test_function_Skip_1()
assertError( 'nao deve registrar esse assert' )
return .T.
@TestFixture(owner='sample')
@Skip(system="windows")
function U_test_function_Skip_2()
assertError( 'nao deve registrar esse assert' )
return .T.
@TestFixture(owner='sample')
@Skip(appServerName="HARPIA")
function U_test_function_Skip_3()
assertError( 'nao deve registrar esse assert' )
return .T.
Exemplos com comando
@TestFixture(owner='sample')
function U_test_function_Skip_5()
SKIPASSERT TLPPVERSION ">= 01.02.10"
assertError( 'nao deve registrar esse assert' )
SKIPASSERT SYSTEM "windows"
assertError( 'nao deve registrar esse assert' )
SKIPASSERT APPSERVERNAME "HARPIA"
assertError( 'nao deve registrar esse assert' )
return .T.
Combinando filtros
Pode-se juntar até os seis filtros no mesmo skip. O operador entre eles é sempre AND — todas as condições precisam ser válidas para o pulo acontecer:
@Skip( system="linux", appServerName="HARPIA" )
SKIPASSERT SYSTEM "linux" APPSERVERNAME "HARPIA"
Função customizada
O filtro custom delega a decisão a uma função sua (AdvPL ou TLPP, Function ou User Function). Ela recebe dados do contexto — mantenha a assinatura mesmo que não use os parâmetros:
user function customSkip( cNameClass, cNameFunction, cSource, lUnix, cBinName, cBinVersion, cTlppVersion )
local lSkip as logical
lSkip := ( cSource $ test.SkipSourcesList() )
return lSkip
Retorno .T. pula o teste; .F. executa normalmente.
Documentação oficial: e-4 - Pulando Testes.
totvs/tlpp-probat-samples — test/probat_resources/test_sample_skip.tlpp
Exemplos no GitHub
Fontes .tlpp no repositório: Recursos básicos.