Você está na página 1de 75

Teste Estrutural

Prof. Jean-Rémi Bourguet

Teste de Software
TDD: Test Driven Development

I Na técnica de caixa-preta, a implementação do código não é avaliada.


I Pode ser inviabilizada (infinitas possibilidades combinatórias)!

Teste Estrutural 2/24


TDD: Test Driven Development

I Técnica relacionada com o conceito de verificação e validação.


I Escrever um caso de teste automatizado para nova funcionalidade.
I Então, é produzido código que possa ser validado pelo teste!

Teste Estrutural 2/24


TDD: Test Driven Development

I Com TDD, a ênfase no teste automático unitário aumentou.


I Kent Beck foi pioneiro no desenvolvimento de SUnit.
I SUnit é um framework de teste unitário pra a linguagem SmallTalk.

Teste Estrutural 2/24


Arquitetura básica de um XUnit

I Depois com a popularização do Java, o SUnit deu origem ao JUnit.


I Na página Wikipédia, estão listados 450+ projetos de frameworks.
I xUnit: nome genérico para estruturas de testes automáticos unitários.
I Mock Objects são objetos que imitam objetos reais para teste.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Executor de teste (Test runner):


Executa testes escritos segundo o frameworks xUnit.
Reporta os resultados da execução.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Caso de testes (Test case):


Classe mais elementar dá origem a todos os demais testes escritos.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Contexto de teste (Test fixture):


Estabelece as precondições necessárias para a execução de um teste.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Conjunto de teste (Test suite):


Define o conjunto de testes que compartilham o mesmo contexto.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Execução do teste (Test execution):


Respeita uma sequência definida.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Formatador do resultado dos testes (test result formatter):


Permite exibir os resultados das execuções em diferentes formatos.

Teste Estrutural 3/24


Arquitetura básica de um XUnit

I Assertiva (assertion):
Mecanismo que permite verificar o comportamento do teste unitário.
Retorna valores true ou false (correspondência ao resultado esperado).
Falhas na assertiva são em geral sinalizadas por meio de exceções.

Teste Estrutural 3/24


JUnit

I A nomeação dos métodos de testes respeita uma padronização.


I Obrigatoriamente, terem seus nomes iniciados com a palavra test.
I Com as anotações disponíveis no Java 5, não há necessidade.
I Basta inserir a anotação Test antes dos metodos dos casos de teste.

Teste Estrutural 4/24


JUnit

I JUnit é introduzido no Nível 2 (Geranciado, Modelos de maturidade).

Teste Estrutural 4/24


JUnit

I Caso deseje utilizar o framework de forma isolada, baixe os arquivos:


junit-4.12.jar e hamcrest-core-1.3.jar.
I São disponíveis na página do projeto http://junit.org/junit4/
I Inclui caminho na variável CLASSPATH ou no comando de compilação.

Teste Estrutural 4/24


JUnit

I Para ilustrar o uso e as funcionalidades oferecidas pelo JUnit...


I ...será utilizada como emxemplo o programa Identifier.
I Avalia se uma sequência de caracteres corresponde a um id válido.
I Id válido deve começar com letra e conter apenas letras ou dígitos.
I Tem no mínimo um e no máximo seis caracteres de comprimentos.

Teste Estrutural 5/24


JUnit

I O projeto é composto pelas classes:


identifier.Identifier e identifier.IdentifierMain.
I A 1a implementa as regras de negócio (lógica de validação do id)
I A 2a é uma interface de acesso via linha.
Ela invoca o método de validação de identifier.Identifier.

Teste Estrutural 5/24


JUnit

public c l a s s I d e n t i f i e r {
p u b l i c boolean v a l i d a t e I d e n t i f i e r ( S t r i n g s ) {
char achar ; boolean v a l i d _ i d ; v a l i d _ i d = t r u e ;
achar = s . charAt ( 0 ) ; v a l i d _ i d = v a l i d _ s ( achar ) ;
i f ( s . length ( ) > 1) {
achar = s . charAt ( 1 ) ; i n t i = 1 ;
while ( i < s . l e n g t h ( ) − 1 ) {
achar = s . charAt ( i ) ;
i f ( ! v a l i d _ f ( achar ) ) { v a l i d _ i d = f a l s e ; } i ++;
}
}
i f ( v a l i d _ i d && ( s . l e n g t h ( ) >= 1 ) && ( s . l e n g t h ( ) <= 6 ) )
{ return true ; } else { return f a l s e ; }
}
p u b l i c boolean v a l i d _ s ( char ch ) {
i f ( ( ( ch >= ’A ’ ) && ( ch <= ’Z ’ ) ) || ( ( ch >= ’ a ’ ) && ( ch <= ’ z ’ ) ) )
{ return true ; } else { return f a l s e ; }
}
p u b l i c boolean v a l i d _ f ( char ch ) {
i f ( ( ( ch >= ’A ’ ) && ( ch <= ’Z ’ ) ) || ( ( ch >= ’ a ’ ) && ( ch <= ’ z ’ ) ) ||
( ( ch >= ’ 0 ’ ) && ( ch <= ’ 9 ’ ) ) )
{ return true ; } else { return f a l s e ; }
}
}
Teste Estrutural 5/24
JUnit

public c l a s s IdentifierMain {
p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) {
i f ( a r g s . l e n g t h == 0 ) {
System . out . p r i n t l n ( " Usage : i d e n t i f i e r . I d e n t i f i e r [ s t r i n g ] " ) ;
}
else {
I d e n t i f i e r id = new I d e n t i f i e r ( ) ;
i f ( id . v a l i d a t e I d e n t i f i e r ( args [ 0 ] ) ) {
System . out . p r i n t l n ( " Valid " ) ;
}
else {
System . out . p r i n t l n ( " I n v a l i d " ) ;
}
}
}
}

I Quando o IdentifierMain é executado sem argumentos...


...emite uma mensagem solicitando uma sequência de caracteres.
I Quando a sequência abc é fornecida, o programa responde Valid.
I Quando a sequência 1de é fornecida, programa responde Invalid.
Teste Estrutural 5/24
JUnit

I O programa possui alguns defeitos conhecidos.


I Utilizados para exemplificar as mensagens exibidas quando...
I ...existem discrepâncias entre os resultados esperados e obtidos.
$ javac Identifier.java

$ javac IdentifierMain.java

$ java IdentifierMain abc


Valid

$ java IdentifierMain 1de


Invalid

Teste Estrutural 5/24


JUnit

I O programa abaixo não é considerado um caso de teste completo.


I Mas serve para ilustrar a estutura de um teste do JUnit.
I Uma classe de teste para o JUnit é uma classe Java normal.
I Para criar um caso de teste, precisa insirir uma anotação Test.
I Anotação precedendo um método do tipo public void.
I O método fail que pertence à classe org.junit.Assert indica...
I ...que este teste deve falhar durante sua execução.
import org . j u n i t . T e s t ;
import s t a t i c org . j u n i t . A s s e r t . * ;

public c l a s s HelloJUnit {
@Test
p u b l i c void f i r s t T e s t ( ) {
f a i l ( " T e s t e incompleto ! ! ! ! " ) ;
}
}
Teste Estrutural 6/24
JUnit

$ javac -cp junit-4.12.jar:hamcrest-core-1.3.jar HelloJUnit.java


$ java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore HelloJUnit
JUnit version 4.12
.E
Time : 0 , 0 1 1
There was 1 f a i l u r e :
1) f i r s t T e s t ( HelloJunit )
j a v a . lang . A s s e r t i o n E r r o r : T e s t e incompleto ! ! ! !
a t org . j u n i t . A s s e r t . f a i l ( A s s e r t . j a v a : 8 8 )
at HelloJUnit . f i r s t T e s t ( HelloJUnit . java : 7 )
a t j a v a . base/j d k . i n t e r n a l . r e f l e c t . NativeMethodAccessorImpl . invoke0 ( Native
Method )
a t j a v a . base/j d k . i n t e r n a l . r e f l e c t . NativeMethodAccessorImpl . invoke (
NativeMethodAccessorImpl . j a v a : 6 2 )
a t j a v a . base/j d k . i n t e r n a l . r e f l e c t . DelegatingMethodAccessorImpl . invoke (
DelegatingMethodAccessorImpl . j a v a : 4 3 )
a t j a v a . base/ j a v a . lang . r e f l e c t . Method . invoke ( Method . j a v a : 5 6 6 )
a t org . j u n i t . runners . model . FrameworkMethod$1 . r u n R e f l e c t i v e C a l l (
FrameworkMethod . j a v a : 5 0 )

FAILURES ! ! !
T e s t s run : 1 , Failures : 1

Teste Estrutural 6/24


JUnit

A estrutura classica de um caso de teste no JUnit consiste de:

I Instanciar o objeto da classe cujos métodos se deseja testar;


I Invocar o método em teste com a entrada desejada.
I Armazenar o resultado de sua execução.
I Utilizar um método de assertiva da classe org.junit.Assert.
I Comparar o resultado esperado com o resultado obtido.

Teste Estrutural 6/24


JUnit

I O programa ilustra os dois exemplos de execução de Identifier.


I Observa-se a estrutura clássica de escrita de caso de teste no JUnit.
import org . j u n i t . T e s t ;
import s t a t i c org . j u n i t . A s s e r t . * ;

public c l a s s HelloJunit2 {

@Test
p u b l i c void v a l i d a t e 1 ( ) {
I d e n t i f i e r id = new I d e n t i f i e r ( ) ;
boolean r e s u l t = id . v a l i d a t e I d e n t i f i e r ( " abc " ) ;
a s s e r t E q u a l s ( tr ue , r e s u l t ) ;
}

@Test
p u b l i c void v a l i d a t e 2 ( ) {
I d e n t i f i e r id = new I d e n t i f i e r ( ) ;
boolean r e s u l t = id . v a l i d a t e I d e n t i f i e r ( " 1de " ) ;
assertEquals ( false , result ) ;
}
}

Teste Estrutural 6/24


JUnit

$ javac -cp junit-4.12.jar:hamcrest-core-1.3.jar:. HelloJUnit2.java


$ java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore HelloJUnit2
4.12
..
Time : 0 , 0 1 1

OK ( 2 t e s t s )

Teste Estrutural 6/24


JUnit

I O Apache Maven é uma excelente ferramenta de apoio.


I Particularmente a qualquer equipe que trabalhe com projetos Java.
I Ferramenta de automação e gerenciamento de projetos Java.
I Também possa ser utilizada com outras linguagens.
I Forma padronizada de construção e publicação de suas aplicações
I Agrega agilidade e qualidade ao produto final.
I Extremamente flexível, permite que sejam adicionados plugins.

Teste Estrutural 7/24


JUnit

Teste Estrutural 7/24


JUnit

I Eclipse é o IDE tradicional para desenvolver programas em Java.

Teste Estrutural 7/24


JUnit

I O primeiro passo é abrir o projeto Maven dentro do Eclipse.


File > Import

Teste Estrutural 7/24


JUnit

Teste Estrutural < project >


< modelVersion > 1.0.0 < /modelVersion >
< modelVersion > 1.0.0 < /modelVersion >
< groupId > com.checkId.app < /groupId >
< artifactId > checkId < /artifactId >
< version > 1 < /version >
< /project >
7/24
JUnit

I Click direito no src/test/java.


New > JUnit Test Case

Teste Estrutural 7/24


JUnit

I Click direito no HelloJunit.java


Run as > JUnit Test

Teste Estrutural 7/24


JUnit

Teste Estrutural 7/24


JUnit

I Click direito no src/test/java/identifier.


New > JUnit Test Case
I Click direito no HelloJunit2.java
Run as > JUnit Test

Teste Estrutural 7/24


JUnit

I Vamos realizar 4 novos casos de teste ("",A1b2C3d,2B3,Z#12).

Teste Estrutural 7/24


JUnit

I O caso de teste validate01 não funcionou como o esperado.


I A falha identificada caracteriza-se em relação ao resultado obtido.
I Foi ao se deparar com seq. de caracteres válida mas de tamanho 0.
I O metodo tenta extrair o primeiro caractere de s...
I ...sem fazer um teste de validação garantindo que s não seja nulo.
public c l a s s I d e n t i f i e r {
p u b l i c boolean v a l i d a t e I d e n t i f i e r ( S t r i n g s ) {
char achar ; boolean v a l i d _ i d ; v a l i d _ i d = t r u e ;
achar = s . charAt ( 0 ) ; v a l i d _ i d = v a l i d _ s ( achar ) ;
i f ( s . length ( ) > 1) {
achar = s . charAt ( 1 ) ; i n t i = 1 ;
while ( i < s . l e n g t h ( ) − 1 ) {
achar = s . charAt ( i ) ;
i f ( ! v a l i d _ f ( achar ) ) { v a l i d _ i d = f a l s e ; } i ++;
}
}
...

Teste Estrutural 7/24


JUnit

I O trecho de código apresenta uma possível correção:


package i d e n t i f i e r ;

public c l a s s I d e n t i f i e r {
p u b l i c boolean v a l i d a t e I d e n t i f i e r ( S t r i n g s ) {
char achar ;
boolean v a l i d _ i d = f a l s e ;
i f ( ( s ! = n u l l ) && ( s . l e n g t h ( ) > 0 ) ) {
achar = s . charAt ( 0 ) ;
v a l i d _ i d = v a l i d _ s ( achar ) ;
i f ( s . length ( ) > 1) {
achar = s . charAt ( 1 ) ;
int i = 1;
while ( i < s . l e n g t h ( ) − 1 ) {
achar = s . charAt ( i ) ;
i f ( ! v a l i d _ f ( achar ) )
valid_id = false ;
i ++;
}
}
}
...
Teste Estrutural 7/24
JUnit

Teste Estrutural 7/24


Definindo Contexto

I Os testes apresentados são bem semelhantes entre si.


I Observe que, antes da execução do caso de teste em si...
I ...o objeto id sempre é colocado em um estado conhecido.
I Visa a isolar possíveis influências do estado do objeto...
I ...quando reutilizado entre diferentes casos de teste.

Teste Estrutural 8/24


Definindo Contexto

I Quando existe um código que é comum a todos os testes e que...


I ...deve ser executado sempre antes ou após cada caso de teste...
I ...o JUnit oferece outras anotações que podem auxiliar e simplificar.
I Before: método anotado executado sempre antes cada caso de teste.
É utilizado para colocar o programa num estado cohnecido.
I After: método anotado executado sempre após cada caso de teste.
Mesmo se o método de teste lançar uma exceção.

Teste Estrutural 8/24


Definindo Contexto

I Importar as classes org.junit.Before e org.junit.After.


I Aqui será utilizada a anotação Before.
I A anotação Before aparece antes de um método public void.
I No método, o que é feito é apenas a inicialização do atributo id.
I Posteriormente, é utilizado para invocar validateIdentifier...
I ...dentro de cada um dos casos de teste.

Teste Estrutural 8/24


Definindo Contexto

I Com a introdução do método anotado com o Before...


I ...a sequência de execução dos métodos de UseBeforeTestCase é:
setUp, validate1, setUp, validate2, setUp...
Teste Estrutural 8/24
Definindo Contexto

I O método tearDown() para configurar o ambiente de teste...


I ...antes da execução de todos os testes.

Teste Estrutural 8/24


Definindo Contexto

I Existem também as anotações BeforeClass e AfterClass.


I Permitem a execução de métodos de classe public static void...
I ...uma única vez antes e/ou após a execução de todos os testes.

Teste Estrutural 8/24


Testes temporizados

I Considere que algum problema na implementação leve o programa...


I ...a entrar em looping infinito e tal situação pode ser simulada...
I ...comentando-se o incremento da variável i que controla o laço.
I O retorno do método nunca é obtido, JUnit não pode progredir...

Teste Estrutural 9/24


Testes temporizados

I Parâmetro na anotação Test para especificar um limite de tempo.


I O teste é encerrado com falha por exceder o tempo de execução.
I O próximo teste é executado.

Teste Estrutural 9/24


Testes temporizados

I Corrigido o problema (removendo-se o comentário)...


I ...os testes passam a executar normalmente; sem falhas.

Teste Estrutural 9/24


Teste de execeções

I JAVA possui o mecanismo de tratamento e lançemanto de exceções.


I Comunica ao usuário do método de que algo está errado.
I Quando um método lança uma exceção por meio da cláusula throw.
I É interessante que sejam realizados testes para verificar se...
I ...nas condições estelecidas, a execeção correta é lançada.

Teste Estrutural 10/24


Teste de execeções

I O JUnit oferece um mecanismo interessante para auxiliar o testador.


I Validar se as execeções corretas são lançadas.
I O parâmetro expected da anotação Test permite especificar...
I ...o tipo de execeção que se espera lançar pelo teste.

Teste Estrutural 10/24


Teste de execeções

I O método substring aceita como parâmetro um número inteiro.


I Ele indica qual índice do primeiro caractere fará parte do substring.
I O substring retornado inicia no índice especificado e vai até o final.

Teste Estrutural 10/24


Teste de execeções

I Caso o número fornecido seja maior que o tamanho da string.


I É lançada a execeção do tipo IndexOutOfBoundsException.
I Vai falhar caso o método não lance exceção alguma ou lance...
I ...uma exceção diferente da especificada no parâmetro expected.

Teste Estrutural 10/24


Conjunto de Testes

I A forma de organização dos testes no JUnit depende da experiência.


I Depende da organização desejada pelos testadores.
I Uma boa pratica seria concentrar os testes em arquivos separados.
I Execução de todos os testes a partir de um único arquivo de teste.

Teste Estrutural 11/24


Conjunto de Testes

O JUnit oferece anotações que permitem fazer isso...


I @RunWith define a classe responsável pela execução dos testes.
Quando nao especificada, o JUnit utiliza a classe padrão
org.junit.internal.runners.TestClassRunner.
I @Suite define as classes de teste compondo o conjunto de teste.

Teste Estrutural 11/24


Conjunto de Testes

I Observe que a classe de teste em si está vazia.


I Ao executar AllTests, as classes do SuiteClasses são executadas.

Teste Estrutural 11/24


Ignorando Casos de Testes

I Existem situações em que testes precisam ser ignorados.


I Assim sua execução se complete com sucesso. Ocorre, por exemplo...
I ...quando um teste complicado não foi finalizado por completo ou
I ...em função de manutenções no testes, nem todos foram corrigidos.

Teste Estrutural 12/24


Ignorando Casos de Testes

I A anotação @Ignore precedendo uma anotação @Test sinaliza...


I ...ao JUnit que o referido teste não deve ser executado.
I Exibe uma mensagem: conjunto de teste possui testes ignorados.

Teste Estrutural 12/24


Testes parametrizados

I No HelloJUnit2.java, a diferença entre os testes está apenas...


I ...no valor da entrada e da saída esperada de cada caso de teste.
I Quando os testes possuem estrutura semelhante...
I ...é possível utilizar o recurso de parametrização oferecido pelo JUnit.
I Vai permitir a separação dos dados de teste do código de teste em si.
I Os dados de teste vão ser separados da lógica dos testes.

Teste Estrutural 13/24


Testes parametrizados

I Neste abordagem, existe um único método de teste.


I A entrada passa por param; e o resultado esperado por result.
I Novas anotações: testes executados de forma parametrizada.
I Indica quais são os parâmetros utilizados (dados dos casos de teste).

Teste Estrutural 13/24


Isolando Código dos Dados do Teste

I Até agora, a inclusão de novos testes demanda uma compilação.


I Assim as alterações podem ter efeito.
I A situação ideal seria colocar os dados dos testes separados.
I Separados em um arquivo da lógica de execução dos testes.
I A leitura dos dados é feita através de uma planilha referenciada.

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

I A infrastrutura precisa da adaptação da classe SpreadsheetData.


I Essa é uma contribuição de John Ferguson Smart.
I Publicado no artigo Data Driven Tests with JUnit 4 and Excel.
I Para extrair dados da planilha Excel dentro de um programa JAVA.
I É necessário o uso de alguma API (e.g. Apache POI).

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

I Sendo um projeto Maven, basta incluir o trecho do XML abaixo.


I Incluir nas dependências do file pom.xml do projeto Identifier.

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

I O conteúdo do arquivo data.xls é apresantado abaixo.


I Observe que na planilha não necessita de rótulos nas colunas.
I Mas é importante saber o que cada uma delas representa.
I Aqui a primeira coluna corresponde à entrada do teste.
I Aqui a segunda coluna corresponde à saída esperada.
I Aqui a terceira corresponde às partições do caso de teste.

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

I Os testes são identificados por índices, no formato [x]...


I ...onde x é o índice do caso de teste, sendo o primeiro índice o zero.
I A anotação @Parameters possui um parâmetro name utilizado...
I ...para redefinir o texto usado na saída da execução dos testes.
I Por padrão, o conteúdo desse campo contém apena {index}.
I Isso permite que cada teste se torne mais autoexplicativo.

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

Teste Estrutural 14/24


Isolando Código dos Dados do Teste

I O uso das planilhas permite que os testes possam ser gerados.


I Gerados até mesmo por pessoas que não conhecem o JUnit .
I Recebem planilhas com indicativos de como dados são fornecidos.

Teste Estrutural 14/24


Relatórios JUnit

I Os relatórios reportados pelo JUnit incluem o tempo gasto...


I ...quantidade de testes executados e número de testes que falharam.
I Relatório da execução dos testes (linha de comando com JUnitCore).

Teste Estrutural 15/24


As principais vantagens do JUnit

I O framework evolui em versão com vasta documentação.


I Comunidade de densenvolvimento bastante ativa.
I Comunidade preocupada com a qualidade do produto em si.
I São agregadas novas funcionalidades para escrita dos testes.
I Os testes são utilizados por ambientes de integração continua.
I Padrão para a escrita de casos de teste.

Teste Estrutural 16/24


As principais desvantagens do JUnit

I Necessidade de conhecimento de programação para sua utilização.


I Grande quantidade de código para viabilizar a automatização.
I Dificuldade de adoção em teste de programas não determinísticos...
I As assertivas exigem o resultado esperado para aprovar o teste.

Teste Estrutural 17/24


Flexibilidade do JUnit

I Vale ressaltar sobre a flexibilidade do framework JUnit.


I O framework foi desenvolvido como foco no teste unitário.
I Ele pode ser utilizado na automatização de testes de outras fases.
I O framework se tornou muito popular na maioria dos métodos ágeis.
I Ele pode ser integrado com os principais IDE.

Teste Estrutural 18/24


Referências

Vincenzi, A. M. R., Delamaro, M. E., Dias Neto, A. C., Fabbri, S. C. P. F., Jino, M., and
Maldonado, J. C. (2018).
Automatização de teste de software com ferramentas de software livre.
Elseiver.

Teste Estrutural 19/24


Creditos das ilustrações

Page 3: https:
//www.forbes.com/sites/alexanderlavin/2019/06/17/beyond-black-box-ai/
Page 2: https://medium.com/@vinicius_roc/
testes-automatizados-em-arquiteturas-orientada-a-servi%C3%
A7os-soa-a892c82811f3
Page 2: http://ithare.com/
testing-my-personal-take-on-testing-including-unit-testing-and-atddbdd/
Page 3: https://martinfowler.com/bliki/TestPyramid.html

Page 4: https://www.slideshare.net/igorvavrish/unit-testing-framework

Page 5: https://medium.com/default-to-open/
property-based-testing-in-kotlin-part-1-56929927b8b8
Page 6: https://meissarunner.com/

Page 7: https://medium.com/@victorsteven/
understanding-unit-and-integrationtesting-in-golang-ba60becb778d
Page 8: https://realpython.com/django-pytest-fixtures/

Page 9: https://pedrorijo.com/blog/intro-mutation/

Teste Estrutural 20/24


Creditos das ilustrações

Page 10: https://www.lynda.com/Java-tutorials/


Conditional-test-execution/718639/749895-4.html
Page 11: https://www.slideshare.net/rsim/plsql-unit-testing-can-be-fun

Page 12: https://m.9gag.com/gag/a57K6gq

Page 13: https://www.gyanblog.com/gyan/


20-linkage-error-loader-constraint-violation-junit-test-case-developmen
Page 14: https://www.slideshare.net/Dataversity/
dataed-online-data-management-maturity-model-38010175
Page 15: https://javapapers.com/java/java-classpath/,
https://www.pngwave.com/png-clip-art-ouxny
Page 16: https://twitter.com/lyhmle/status/1264634084980150274

Page 17: https://dribbble.com/shots/3276642-Robot-Joke

Page 20: http://joyreactor.com/post/549045

Page 23: http://intellomind.com/featured-courses/

Page 25: http://www.jory.tv/dpdp/hello-world

Teste Estrutural 21/24


Creditos das ilustrações

Page 26: https://blog.matheuscastiglioni.com.br/


trabalhando-com-diferentes-perfis-no-maven/
Page 28: http://blog.ttoine.net/en/2016/06/30/
how-to-add-eclipse-neon-launcher-in-gnu-linux-menus-and-launchers/
Page 32:
https://www.reddit.com/r/ProgrammerHumor/comments/79zjl0/unit_tests/
Page 39: https://www.istockphoto.com/br/vetor/
o-exame-falhado-ou-resultados-maus-do-teste-vector-a-ilustra%C3%A7%
C3%A3o-a-pupila-infeliz-dos-gm1170637884-324006026
Page 40: https://ar.pinterest.com/pin/830632724998647539/

Page 41:
https://www.epicgames.com/store/en-US/product/before-we-leave/home
Page 43: https:
//www.codeaffine.com/2014/08/18/junit-in-a-nutshell-test-structure/
Page 44: https://subscription.packtpub.com/book/web_development/
9781787285736/1/ch01lvl1sec10/testing-frameworks-for-the-jvm

Teste Estrutural 22/24


Creditos das ilustrações

Page 48:
https://www.zoltanraffai.com/blog/checked-and-unchecked-exceptions/
Page 49:
https://medium.com/techtron/functional-errors-handling-1d1b4688769d
Page : http://www.rebellionrider.com/
the-most-innovative-ways-to-utilize-python-slice/
Page 51: https://br.linkedin.com/learning/
robot-framework-test-automation-level-1-selenium?trk=seo_pp_d_cymbii_
m015_learning
Page 52: https://br.123rf.com/photo_19713801_car%C3%
A1ter-alaranjado-dos-desenhos-animados-correr-com-grande-engrenagem-bra
html
Page 54: https://imgur.com/gallery/TUO5ls1

Page 56:
https://blog.maddevs.io/mad-fake-slack-945ea810a778?gi=858b6447433
Page 58: https://medium.com/edureka/
selenium-framework-data-keyword-hybrid-frameworks-ea8d4f4ce99f

Teste Estrutural 23/24


Creditos das ilustrações

Page 62: http://engineering.pivotal.io/post/


some-blog-post-or-how-i-learned-to-stop-worrying-and-like-red-junit-te
https://laptrinhx.com/
running-junit-tests-with-gitlab-ci-for-kubernetes-hosted-apps-389884549
Page 65:
https://www.slideshare.net/pokpitch1/unit-testing-with-junit-62437433
Page 66: http://tutorialcoursebeginner.blogspot.com/2016/08/
java-unit-testing-tutorial-junit.html

Teste Estrutural 24/24

Você também pode gostar