SlideShare uma empresa Scribd logo
Evoluindo App´s e Serviços
com
Testes de Contrato
@rafaelportela
Você
Vestindo a
camisa do
projeto
seu
Chefe
Ajudando como pode
NO GRITO
sobre a arte de lidar com complexidade
NO GRITO
sobre a arte de lidar com complexidade
Don´t you know that´s toxic?
CONFLITO
Mais pessoas
Mais times
Mais complexidade
CONFLITO
Mais pessoas
Mais times
Mais complexidade
contrato
consumer-driven contracts
testes de contrato
Validate
bank
accounts
3-D Secure
Auth
Money
transfer
Login
List items
See details
Comment
Like
Add Card
Pay
Moderate
users
Back end
Moderator
Bank
Android
iOS
web
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
Time 1
Time 2
Time 3
Time 4
Time 5
problema?
problema?
ENTENDIMENTO
ENTRE OS
uma única app
DIFERENTES
problema?
uma única experiência
DIFERENTES
problema?
problema?
DEPENDÊNCIA
discutir funcionalidades
priorizar tarefas
dependência de serviços
deploys sincronizados
problema?
DEPENDÊNCIA
discutir funcionalidades
priorizar tarefas
dependência de serviços
deploys sincronizados
contrato
Outro exemplo: <insira SEU projeto aqui>
Você e seu time estão desenvolvendo
uma aplicação maneira
(web, ou mobile, ou uma api etc)
O projeto cresce.
O time cresce.
O estresse cresce.
O projeto cresce.
O time cresce.
O estresse cresce.
Módulo de
Produtos
Outro time da empresa quer usar
sua listagem de produtos. Massa! :)
Outro time da empresa quer usar
sua listagem de produtos. Massa! :)
Estamos com pouco tempo. Compartilhe a
string de conexão do banco com o
pessoal, eles vão dar um jeito.
Gerente do
seu projeto:
Outro time da empresa quer usar
sua listagem de produtos. Massa! :)
Estamos com pouco tempo. Compartilhe a
string de conexão do banco com o
pessoal, eles vão dar um jeito.
Gerente do
seu projeto:
Melhor amigo: Além dos dados, tem código também. Crie
um jar file de produtos e manda por email.
Outro time da empresa quer usar
sua listagem de produtos. Massa! :)
Estamos com pouco tempo. Compartilhe a
string de conexão do banco com o
pessoal, eles vão dar um jeito.
Gerente do
seu projeto:
Melhor amigo: Além dos dados, tem código também. Crie
um jar file de produtos e manda por email.
Outro time da empresa quer usar
sua listagem de produtos. Massa! :)
Estamos com pouco tempo. Compartilhe a
string de conexão do banco com o
pessoal, eles vão dar um jeito.
Gerente do
seu projeto:
Melhor amigo: Além dos dados, tem código também. Crie
um jar file de produtos e manda por email.
você: =(
Serviço de
Produtos
Código e dados isolados
Acesso apenas via HTTP/Rest
Serviço de
Produtos
Código e dados isolados
Acesso apenas via HTTP/Rest
Mas responsa-
bilidades estão
isoladas.
Times menores,
cuidando de
partes diferentes.
NÃO diminue a
complexidade
do sistema
como um todo.
(complexidade aumenta!)
Consumidor do serviço
Cliente
Time A
Provedor do serviço
Servidor
Time B
GET /products/1
Accept: application/json
200 OK
Content-Type: application/json
{“id”: 1,“name”: “beer”}
REQUEST RESPONSE
• Repositórios (base de código) independentes
• Ferramentas de desenv. e suite de testes independentes
• Pipelines de build independentes
• Times mais ou menos independentes
• Time A (consumidor) depende de Time B (provedor)
Deploy a
cada
2 semanas
Deploy todo dia
{
“id”: 1,
“name”: “Duff Beer”,
“content”: “341ml”
}
GET /products/1
{
“id”: 1,
“name”: “Duff Beer”,
“content”: “341ml”
}
{
“id”: 1,
“brand”: “Duff Beer”,
“content”: “341ml”
}
Mudança =>
quebrando clientes
em produção
O site não tá mais abrindo!
Essa tela branca fica carregando pra sempre!
Meus dados sumiram?!
Não acontece nada quando eu aperto o botão!
Sou sempre o último a saber
Na verdade, a gente precisa
só da parte numérica..
Separar da unidade na mão
é muita gambiarra! =/
Tranquilo..
Mudo e faço
deploy! ;)“341ml” => “341”
Ei, tá maluco?
A gente já tá usando as
medidas com unidades!!
...
Pra mim, tudo certo!
Eu só uso o nome e id. ...
Time A
Time B
Se eu soubesse como
cada um tá usando
minha API...
Tô meio perdido..
Dá pra deixar claro o que
vocês querem?
Sério, preciso saber!
Relaxa, filhão..
A gente precisa de um
negócio assim:
“id” -> um número
“brand” -> uma string
“content” -> número também
Mas a gente usa as
unidades com as
medidas. Manda os
dois!!!
“id” -> um número
“brand” -> uma string
“content” -> número
“unit_of_measure -> string
Por mim.. Só
uso o id e o
nome..
“id” -> número
“brand” -> string
um objeto json
{
“id”: 1,
“brand”: “Duff Beer”,
“unit_of_measure”: “ml”,
“content”: 341
}
inteiro
inteiro
string
{
“properties”: {
“id”: {“type”: “integer”},
“brand”: {“type”: “string”},
“unit_of_measure”: {“type”: “string”},
“content”: {“type”: “integer”}
}
} JSON Schema
Meu pipeline
de build
commit
• Build
• Unit tests
• Functional (API level) tests
• Contract tests
• Deploy
• PROFIT $$$
Meu pipeline
de build
commit
• Build
• Unit tests
• Functional (API level) tests
• Contract tests
• Deploy
• PROFIT $$$
Valido se os contratos dos meus
clientes estão sendo satisfeitos!
Agora eu sei quando uma mudança é
séria (breaking change)
Agora o pessoal fica tranquilo e
de boa quando eu aviso com
antecedência que vou deployar
uma breaking change..
Sei até os clientes que vão
quebrar e os que não vão!
Dá pra desenrolar as
mudanças aos incrementos,
eles vão se adaptando aos
poucos.
E não tem mais
essa de deploy do
cliente e serviço ao
mesmo tempo pra
não quebrar!!
Se algo der errado, os testes
falham.. E não tem deploy.
Friendship never ends!!!
Consumer-driven contracts
BONUS TRACK
Queremos mais
umas mudanças!
Queremos mais
umas mudanças!
Beleza!
Atualizem os
contratos com
as mudanças,
e então eu
acerto.
JSON
Schema
pull
request
contrato
JSON
Schema
• Build
• Unit tests
• Functional (API level) tests
• Contract tests
pull
request
contrato
JSON
Schema
• Build
• Unit tests
• Functional (API level) tests
• Contract tests
pull
request
contrato
Atualizo o código,
implemento o que
elas querem
JSON
Schema
• Build
• Unit tests
• Functional (API level) tests
• Contract tests
• Deploy
• PROFIT $$$
pull
request
contrato
commit
Atualizo o código,
implemento o que
elas querem
BONUS TRACK
JSON
Schema
Vamos testar mais rápido!!
Vamos usar mocks pros
nossos testes..
Mas vez ou outra a gente
valida o contrato na API de
verdade! ;)
Test
request
Resposta
mock
Test
request
API de
verdade
JSON
Schema
SATISFACTION
http://martinfowler.com/articles/consumerDrivenContracts.html
http://www.infoq.com/articles/consumer-driven-contracts
https://www.thoughtworks.com/radar/techniques/consumer-driven-contract-testing
https://www.thoughtworks.com/radar/tools/pact-pacto
https://github.com/thoughtworks/pacto
https://github.com/realestate-com-au/pact
REFERÊNCIAS
Obrigado!
@rafaelportela
rafaelportela90
@gmail.com

Mais conteúdo relacionado

Semelhante a Evoluindo Apps e Serviços com Testes de Contrato

Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpecguest49d83b2
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehaveMarcelo Zeferino
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaGiovanni Bassi
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesiMasters
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPAEduardo Britto
 
Empreendendo com soluções Adobe para plataforma RIA
Empreendendo com soluções Adobe para plataforma RIAEmpreendendo com soluções Adobe para plataforma RIA
Empreendendo com soluções Adobe para plataforma RIAIgor Costa
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareAndré Dias
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Gilmar PSL
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SThoughtworks
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoJosé Correia
 
Criando Símbolos Otimizados para Projetos no InduSoft Web Studio
Criando Símbolos Otimizados para Projetos no InduSoft Web StudioCriando Símbolos Otimizados para Projetos no InduSoft Web Studio
Criando Símbolos Otimizados para Projetos no InduSoft Web StudioAVEVA
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 

Semelhante a Evoluindo Apps e Serviços com Testes de Contrato (20)

Dito Tech Talk RSpec
Dito Tech Talk RSpecDito Tech Talk RSpec
Dito Tech Talk RSpec
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Behaviour driven development, com jbehave
Behaviour driven development, com jbehaveBehaviour driven development, com jbehave
Behaviour driven development, com jbehave
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variância
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integraçõesPHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
PHP Experience 2016 - [Workshop] APIs bem desenhadas como base para integrações
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Forca de Digital & RPA
Forca de Digital & RPAForca de Digital & RPA
Forca de Digital & RPA
 
Empreendendo com soluções Adobe para plataforma RIA
Empreendendo com soluções Adobe para plataforma RIAEmpreendendo com soluções Adobe para plataforma RIA
Empreendendo com soluções Adobe para plataforma RIA
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Front end - the right way
Front end - the right wayFront end - the right way
Front end - the right way
 
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu SoftwareDevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
DevOps Summit Brasil: +10 Ferramentas para Melhorar a Qualidade do seu Software
 
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
Projeto de API - TDC 2014 - Floripa - Trilha Arquitetura - 18/05/2014
 
Projeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.SProjeto de API, por Gilmar P.S
Projeto de API, por Gilmar P.S
 
QArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio AraújoQArentena 21: BDD - com Fábio Araújo
QArentena 21: BDD - com Fábio Araújo
 
clean code
clean codeclean code
clean code
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Criando Símbolos Otimizados para Projetos no InduSoft Web Studio
Criando Símbolos Otimizados para Projetos no InduSoft Web StudioCriando Símbolos Otimizados para Projetos no InduSoft Web Studio
Criando Símbolos Otimizados para Projetos no InduSoft Web Studio
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 

Último

AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...
AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...
AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...Consultoria Acadêmica
 
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...JairGaldino4
 
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdf
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdfINSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdf
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdfmarcyomendona
 
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptxeliasmar2
 
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024Consultoria Acadêmica
 
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...Consultoria Acadêmica
 
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdf
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdfATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdf
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdfColaborar Educacional
 
Treinamento de boas práticas de fabricação
Treinamento de boas práticas de fabricaçãoTreinamento de boas práticas de fabricação
Treinamento de boas práticas de fabricaçãohelder866682
 
Curso de operador de guindauto e guindaste
Curso de operador de guindauto e guindasteCurso de operador de guindauto e guindaste
Curso de operador de guindauto e guindasteNetoSilva63
 
Presentación en Power point. Capítulo 5 - Bombas de água.pdf
Presentación en Power point. Capítulo 5 - Bombas de água.pdfPresentación en Power point. Capítulo 5 - Bombas de água.pdf
Presentación en Power point. Capítulo 5 - Bombas de água.pdfDanielMangoldNieves
 
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_JairGaldino4
 

Último (11)

AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...
AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...
AE01 - ESTUDO CONTEMPORÂNEO E TRANSVERSAL GESTÃO ÁGIL DE PROJETOS UNICESUMAR ...
 
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...
Aula 03 - Gestão da Manutenção - OS e Software de Gerenciamento de Manutenção...
 
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdf
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdfINSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdf
INSTRUÇÃO TÉcnica N° 3 - NEOENERGIA BRASILIA .pdf
 
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx
1 - ESPAÇO CONFINADO - NORMA REGULAMENTADORA 33 - SLIDESHARE.pptx
 
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024
AE02 - MAQUINAS TÉRMICAS UNICESUMAR 52/2024
 
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
AE01 -ESTUDO CONTEMPORÂNEO E TRANSVERSAL -COMUNICAÇÃO ASSERTIVA E INTERPESSOA...
 
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdf
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdfATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdf
ATIVIDADE 2 - PSICOLOGIA ORGANIZACIONAL - ok.pdf
 
Treinamento de boas práticas de fabricação
Treinamento de boas práticas de fabricaçãoTreinamento de boas práticas de fabricação
Treinamento de boas práticas de fabricação
 
Curso de operador de guindauto e guindaste
Curso de operador de guindauto e guindasteCurso de operador de guindauto e guindaste
Curso de operador de guindauto e guindaste
 
Presentación en Power point. Capítulo 5 - Bombas de água.pdf
Presentación en Power point. Capítulo 5 - Bombas de água.pdfPresentación en Power point. Capítulo 5 - Bombas de água.pdf
Presentación en Power point. Capítulo 5 - Bombas de água.pdf
 
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_
Aula_LUBRIFICAÇÃO_INDUSTRIAL AUTOMOTIVA_
 

Evoluindo Apps e Serviços com Testes de Contrato