O PROBAT procura no RPO por classes e funções que utilizam determinadas annotations para a execução dos testes.
No exemplo usado com a implementação básica de um teste com classe, tivemos a utilização de duas annotations, são elas:
[TestFixture]
[Test]
Abaixo vamos resumir como a mágica acontece!
Portanto, detalharemos através dos passos de A a G.
[A]
Veja o trecho de nosso exemplo:
#include "tlpp-core.th" #include "tlpp-probat.th" @TestFixture() class test_sample
A annotation [TestFixture] serve para marcar a classe ou função como um dispositivo de teste.
Somente através dessa marcação é que o PROBAT consegue descobrir quais são as classes ou funções específicas de testes.
Um ponto importante é que para fazer uso da annotation referida é preciso importar a include exclusiva do PROBAT fazendo a inserção da instrução logo no começo do fonte: [#include "tlpp-probat.th"]
[B]
Veja esse outro trecho do mesmo exemplo:
@Test('Sample test for the engine manual.') public method sampleTest()
Nesse trecho do código, marcamos o método sampleTest() como um método a ser executado durante os testes através da annotation [Test].
Importante ressaltar que a descrição do teste, feito através do primeiro parâmetro da annotation, é obrigatório pois ele passará por uma função que faz essa validação.
NOTA: Se você declarar uma classe com [TestFixture] e não tiver nenhum método com annotation [Test], seu teste começará a ser executado, porém gerará um resultado do tipo SKIPPED.
[C]
Outro ponto importante para a correta configuração, é utilizar o recurso de namespace.
Veja o trecho:
namespace test.unit.sample
Em nosso exemplo, utilizamos o nome do diretório onde se localiza a implementação do teste, ou seja, test/unit/sample.
Essa informação é importante para fácil localização física dos fontes de testes, afinal ele estará identificado como FOLDER, tando na gravação do SQLite como no XML gerado.
Exemplo:
<testcase id="1" name="Class:TEST.UNIT.SAMPLE.TEST_SAMPLE():New() | Method:SAMPLETEST()" time="0.002" description="Sample test for the engine manual." > Folder: TEST/UNIT/SAMPLE/ | Description: U_SAMPLE( cTest ) | Assert: TLPP.PROBAT.ASSERTEQUALS | Call From: TEST_SAMPLE.TLPP:57 | Expected: {C}-[test_1] | Result: {C}-[test_1] </testcase>
Outro modo de informar o FOLDER é através da propriedade da annotation, segue:
@Test('Sample test for the engine manual.',folder='test/unit/sample') public method sampleTest()
Nesse caso, o PROBAT irá priorizar o valor informado pela annotation.
[D]
Uma obrigatoriedade é o uso de duas includes, são elas:
#include "tlpp-core.th" #include "tlpp-probat.th"
A include [tlpp-core.th] só é obrigada nesse exemplo pois escrevemos o teste com classe, pois caso tivéssemos criado o teste com função não precisaríamos.
A obrigatoriedade da include [tlpp-probat.th] será para todos os testes, pois é nela que se encontram as definições das annotations, comandos e instruções usadas pelo PROBAT.
[E]
Por último e não menos importante, para que o teste seja registrado pela PROBAT na execução é preciso fazer uso de alguma função assert() dentro do método ou função de teste, veja o trecho:
assertEquals( ::xValue, ::xExpected, 'U_SAMPLE( cTest )' )
Porém, para que o assert funcione corretamente, é preciso realizar o "import" do namespace da PROBAT em seu fonte de teste, pois essa função é de uso exclusivo do tlppCore.
using namespace tlpp.probat
Ou simplesmente utilizar o namespace diretamente na chamada da função:
tlpp.probat.assertEquals( ::xValue, ::xExpected, 'U_SAMPLE( cTest )' )
Em nosso exemplo, utilizamos a função assertEquals() pois faz a comparação entre dois valores que devem ser iguais.
Para saber mais em detalhes sobre as funções de asserts disponíveis, acesse o link abaixo!
Após seguir todos os passos acima, basta compilar seu código-fonte de teste para que seja possível executá-lo.
[F]
Para executar seus testes, basta fazer uso da Main Function disponibilizada pelo PROBAT, assim podemos executá-la:
- Através de algum código-fonte;
- Diretamente pela execução do VsCode;
- Linha de comando do Sistema Operacional através do appserver.
Exemplos:
1 - Código fonte
user function MeusTestes() tlpp.probat.run() return
2 - VsCode
Ao pressionar Crtl + F5 ou F5 em seu VsCode, informe o seguinte na caixa de diálogo aberta:
tlpp.probat.run
3 - Linha de comando
Windows
- abra o prompt de comando DOS.
- acesse o diretório onde se encontra o appserver.
- depois utilize o comando:
appserver.exe -run=tlpp.probat.run -env=NOME_AMBIENTE
Linux
- abra o Terminal.
- acesse o diretório onde se encontra o appserver.
- depois utilize o comando:
./appsrvlinux -run=tlpp.probat.run -env=NOME_AMBIENTE
[G]
Resumidamente o PROBAT irá obter as funções ou classes de testes através das annotations:
- TestFixture
- Test
Grava as funções no SQLite para uso posterior ou logo em seguida, dependendo do modo escolhido de "discovery".
Ao executar, lê os nomes de funções e classes já descobertos e executa todos os testes que estejam dentro do escopo pedido pela função RUN.
Através das funções de asserts existentes dentro dos fontes de testes, faz as comparações devidas conforme o valor produzido pelo teste e o valor esperado e após grava no SQLite o resultado dessa operação.
Ao final, faz a exportação dos resultados em um arquivo no formato pedido.