SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
Mule ESB Teste: Teste unitario e
funcional – Parte 1
Abstrato
ensaios, tal como geralmente reconhecido é uma
parte importante do processo de desenvolvimento de
software. Os testes devem ser aplicadas durante
cada fase do processo de desenvolvimento de
software de testes de desenvolvedor para testes de
aceitação. Em engenharia de software ternos de
teste abrangentes e automatizadas irá garantir a
qualidade do software e pode fornecer uma rede de
segurança para alterações de regressão e de
incompatibilidade.
Em projetos de integração ESB Mule essas mesmas
questões surgem. Componentes usados nos fluxos
de mula, os próprios fluxos e a integração de fluxos
em um contexto de sistema precisa ser testado.
Este artigo é o primeiro de uma série de artigos
sobre ensaio de projectos Mule ESB em todos os
níveis. Ele está se concentrando em componentes
menores em um projeto de mula que são testados
com a unidade e testes funcionais.
Teste de Software - A pirâmide de teste
Antes de mergulhar no assunto, vamos dar uma
olhada no contexto de testes. Idealmente testes de
projetos de software é construído de baixo para
cima. Começando com uma grande base de caso de
teste de testes de unidade automatizados para os
menores componentes que compõem o aplicativo
inteiro juntos. Subindo através de camadas de
arquitetura o número de casos de teste diminui para
componentes maiores, porque eles são
composições dos componentes já testados.
Atingindo finalmente o topo da pirâmide em que a
supervisão manual ou testes manuais formam o topo
da pirâmide testar a aplicação como um todo [1].
Source: http://watirmelon.com/2012/01/31/introducing-the-software-testing-ice-
cream-cone/
Automated testing pyramid
testes unitários
No mais baixo nível testes unitários verificar a
funcionalidade correta de classes. Essas classes
podem ser em um projeto de mula simples
extensões e personalizações do quadro Mule.
Exemplos incluem:
• Transformadores personalizadas
• Os componentes personalizados
• avaliadores expressão personalizada
• E, em geral, todos os beans Spring que um pedido
de mula vai usar. Tipicamente, em um projeto de
multi módulo estes feijões são parte de uma
dependência e, portanto, são testados
separadamente na dependência construída.
Os testes de unidade em um sentido clássico pode
testar a funcionalidade de classes personalizadas
sem disparar até Mule. Uma classe POJO simples e
é caso de teste que contém lógica de transformação
cliente poderia ter esta aparência:
public class CustomerTransformationComponent {
public Map<String, Object> tranformCustomer(Customer customer) {
Map<String, Object> returnMap = Maps.newHashMap();
returnMap.put("name", customer.getName());
// Fields mapping
// ...
return returnMap;
}
}
public class CustomerTranformationComponentTest {
@Test
public testTransform() {
Customer testCustomer = new Customer();
// Create test data
Map<String, Object> customerMap = new CustomerTransformationCompone
nt()
.tranformCustomer(testCustomer);
// Assert test data
}
}
Quando a funcionalidade de classes personalizadas requer um contexto
de mula do Quadro Mule fornece um Kit de Teste de Compatibilidade
(TCK) para as extensões de teste e personalizações [3]. Para cada tipo
de componente Mule há uma classe pai abstrato que é derivado de
org.mule.tck.junit4.AbstractMuleTestCase. Eles estão localizados em
mule-core-3.5.2-tests.jar para Mule version 3.5.2.
Por exemplo, um componente Java que implementa a interface Mule
mobilizável com uma lógica complexa confiando no Contexto Mule pode
ser testada com as classes de teste acima mencionados:
public class CustomerComponent implements Callable {
@Autowired
public CustomerService service;
@Overwrite
public Object onCall(MuleEventContext eventContext) throws Exception {
String customerId = (String) eventContext.getMessage().getPayload()
;
Customer customer = service.getCustomer(customerId);
Map<String, Object> customerDetails = transformCustomer(customer);
return customerDetails;
}
}
public class CustomerComponentTest extends SimpleJavaComponentTestCase {
@Test
public testOnCall() {
// Create test data
MuleEvent event = getTestEvent(payload, muleContext);
new CustomerComponent().onCall(new DefaultMuleEventContext(event));
// Assert test data
}
}
Estes testes unitários são benéficos para as seguintes razões:
• componentes testados com um caso de teste TCK assegurar que o
comportamento comum do componente é compatível com o quadro de
mula.
• Usando um caso de teste TCK permite que o desenvolvedor se
concentrar em escrever testes para o comportamento específico do seu
componente.
• Onde teste de um método na API de componentes não pode ser
testada pelo caso de teste TCK, os casos de teste fornece um método
abstrato para o teste, garantindo os testes de desenvolvedor todas as
áreas do componente.
• O TCK fornece um modelo de teste padrão que é um simples conjunto
de classes de teste. O desenvolvedor não precisa se preocupar em
escrever novas classes de teste para os seus casos de teste a cada vez.
Por exemplo. o ciclo de vida de mula de um componente é
automaticamente testada.
Teste Funcional Mule
Quando se trata de testar a interação de componentes entre si em sub
fluxos ou "simples" flui testes funcionais são a maneira recomendada de
teste [4]. Porque Mule ESB é leve e facilmente incorporáveis na testa o
uso de classe theorg.mule.tck.junit4.FunctionalTestCase do TCK é
recomendado para testar peças ou fluxos inteiros. Isto é feito através da
criação de uma unidade de teste, que é derivada a partir desta classe
que vai proporcionar uma instância mula nivelado com um contexto da
mula para efectuar testes funcionais destes fluxos mula.
A ênfase de tais testes é os seguintes aspectos de tais fluxos:
• funcionalidade da mensagem corre-se
• manipulação de Validação e roteamento baseado em regras dentro
destes fluxos
• E a sua manipulação de erro
Por exemplo, uma sub fluxo que é suposto ser chamado poderia ser
assim:
<sub-flow name="subFlow" doc:name="subFlow">
<component class="de.codecentric.example.CustomerComponent" doc:name="Ja
va"/>
</sub-flow>
Para ser capaz de chamar essa sub fluxo de embrulhar a chamada com
um ponto final VM e guardá-lo em um arquivo de teste de recursos XML:
<flow name="TestFlow" doc:name="TestFlow">
<vm:inbound-endpoint exchange-pattern="request-response" path="TestFlow" doc:name="
oint"/>
<flow-ref name="subFlow" doc:name="Call sub flow for testing"/>
</flow>
Os testes unitários correspondentes ficaria assim:
public class SubFlowTest extends FunctionalTestCase {
@Test
public void testFlow() throws Exception{
MuleClient client = muleContext.getClient();
String inputPayload = "550e8400-e29b-11d4-a716-446655440000";
// Create test data
MuleMessage reply = client.send("vm://TestFlow", inputPayload, null
, 5000);
assertNotNull(reply);
assertNotNull(reply.getPayload());
// Assert test data
}
@Override
protected String[] getConfigFiles() {
return new String[]{"./src/test/app/sub-flow-test.xml",
"./src/main/app/sub-flow.xml"};
}
}
Substituindo o protected String[] getConfigFiles() método fornece o
caso de teste os arquivos de configuração de configuração e da mola
mula necessários. Recomendamos para dividir a descrição xml produção
e fornecer a configuração XML de teste em um arquivo XML separat que
só é usado em testes específicos.
Este é um exemplo simples como o fluxo pode ser testada sem
zombando ou alterar os testes internamente. Mule fornece uma maneira
de adicionar <test:component/> componentes em um fluxo para os testes
que fornece zombeteiros e funcionalidade de teste. Nós não preferem
deste modo porque a descrição fluxo será misturado com informações de
teste. Recomendamos o uso de tais casos, a biblioteca MUNIT que é
descrito no artigo seguinte blogue.
Testando o (sub) fluxos usando uma mula incorporado e com uma clara
separação entre o teste e descrição do fluxo de produção oferece os
seguintes benefícios:
• Configurações e fluxos pode ser testado isoladamente um do outro o
que proporcionará uma separação mais limpa de testes e reduzir o
tamanho de cada caso de ensaio. Os erros podem ser identificados deste
modo mais focada, porque eles podem ser localizados em casos de teste
explícitos.
• Não se pretende testar novamente componentes padrão da mula,
porque pode ser assumido que eles já são testados exaustivamente.
Portanto, somente certos caminhos e componentes de fluxos criados
pelos desenvolvedores são necessários para o teste.
• Os casos de teste precisa fornecer uma infra-estrutura de teste própria
que é feita de preferência de nos componentes de infra-estrutura de
memória por exemplo VM como um transporte, ActiveMQ para JMS ou
H2 como um banco de dados. Isso é necessário porque o ambiente de
produção pode não ser sempre fornecida automatizada ou incorporado
para um teste de unidade devido a licença, recurso ou motivos de
desempenho.
• Reutilizar entre os testes, por exemplo, da infra-estrutura em memória
pode ser aumentada fornecendo a configuração apenas uma vez para
todos os casos de teste.
Conclusão
Nós demos neste artigo do blog uma introdução para os primeiros
passos no teste de aplicativos da mula. A partir descrevendo como no
menor componentes da camada de arquitectura e (sub) flui de uma
aplicação da mula pode ser testado e que beneficiam ele produz. Nós
descrito para o efeito testes de unidade clássicos com JUnit no âmbito
contexto TCK mula e os testes funcionais para a TCK. Estes testes
podem ser encontrados em aplicações módulo mula individuais ou em
bibliotecas que contêm componentes e sub-fluxos que são utilizados em
aplicações multi módulo mula.

Mais conteúdo relacionado

Mais procurados

Principais perguntas sobre mule esb parte 2
Principais perguntas sobre mule esb parte 2 Principais perguntas sobre mule esb parte 2
Principais perguntas sobre mule esb parte 2 Jeison Barros
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1Jeison Barros
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3Jeison Barros
 
Compilação de tutoriais blog MulePE
Compilação de tutoriais blog MulePECompilação de tutoriais blog MulePE
Compilação de tutoriais blog MulePEJeison Barros
 
Mulesoft - Salesforce Analytics Cloud Connector - Part 1
Mulesoft - Salesforce Analytics Cloud Connector - Part 1Mulesoft - Salesforce Analytics Cloud Connector - Part 1
Mulesoft - Salesforce Analytics Cloud Connector - Part 1Jeison Barros
 
Usando seu codigo java no mule part 1
Usando seu codigo java no mule part 1Usando seu codigo java no mule part 1
Usando seu codigo java no mule part 1Jeison Barros
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring Framework
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring FrameworkSuporte a Open Source no Oracle WebLogic 12c - Integração com o Spring Framework
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring FrameworkRicardo Ferreira
 
Integrando E-mail ao IBM Connections
Integrando E-mail ao IBM ConnectionsIntegrando E-mail ao IBM Connections
Integrando E-mail ao IBM Connectionsrodrigoareis
 
Boas práticas com Web Services
Boas práticas com Web ServicesBoas práticas com Web Services
Boas práticas com Web ServicesEvaldo Junior
 
Integração salesforce com mulesoft usando o salesforce conector
Integração salesforce com mulesoft usando o salesforce conectorIntegração salesforce com mulesoft usando o salesforce conector
Integração salesforce com mulesoft usando o salesforce conectorJeison Barros
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...fabio perrella
 
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1Edgar Silva
 
Tutorial integrado flex_+_java_+_blazeds
Tutorial integrado flex_+_java_+_blazedsTutorial integrado flex_+_java_+_blazeds
Tutorial integrado flex_+_java_+_blazedswagnerlsrodrigues
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBelliando dias
 
Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicaçãoHelen Picoli
 
Servidores Web
Servidores Web Servidores Web
Servidores Web bastosluis
 

Mais procurados (20)

Principais perguntas sobre mule esb parte 2
Principais perguntas sobre mule esb parte 2 Principais perguntas sobre mule esb parte 2
Principais perguntas sobre mule esb parte 2
 
Como criar um http proxy dinamico com mule parte 1
Como criar um http proxy dinamico com mule   parte 1Como criar um http proxy dinamico com mule   parte 1
Como criar um http proxy dinamico com mule parte 1
 
Como criar um http proxy dinamico com mule parte 3
Como criar um http proxy dinamico com mule   parte 3Como criar um http proxy dinamico com mule   parte 3
Como criar um http proxy dinamico com mule parte 3
 
Compilação de tutoriais blog MulePE
Compilação de tutoriais blog MulePECompilação de tutoriais blog MulePE
Compilação de tutoriais blog MulePE
 
Mulesoft - Salesforce Analytics Cloud Connector - Part 1
Mulesoft - Salesforce Analytics Cloud Connector - Part 1Mulesoft - Salesforce Analytics Cloud Connector - Part 1
Mulesoft - Salesforce Analytics Cloud Connector - Part 1
 
O Elefante e a Mula
O Elefante e a MulaO Elefante e a Mula
O Elefante e a Mula
 
Usando seu codigo java no mule part 1
Usando seu codigo java no mule part 1Usando seu codigo java no mule part 1
Usando seu codigo java no mule part 1
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring Framework
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring FrameworkSuporte a Open Source no Oracle WebLogic 12c - Integração com o Spring Framework
Suporte a Open Source no Oracle WebLogic 12c - Integração com o Spring Framework
 
Integrando E-mail ao IBM Connections
Integrando E-mail ao IBM ConnectionsIntegrando E-mail ao IBM Connections
Integrando E-mail ao IBM Connections
 
Boas práticas com Web Services
Boas práticas com Web ServicesBoas práticas com Web Services
Boas práticas com Web Services
 
Integração salesforce com mulesoft usando o salesforce conector
Integração salesforce com mulesoft usando o salesforce conectorIntegração salesforce com mulesoft usando o salesforce conector
Integração salesforce com mulesoft usando o salesforce conector
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
Middlewares com asp.net core
Middlewares com asp.net coreMiddlewares com asp.net core
Middlewares com asp.net core
 
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
Flyweigth - Arquitetura de Referência para Open Banking Brasil Fase 1
 
Tutorial integrado flex_+_java_+_blazeds
Tutorial integrado flex_+_java_+_blazedsTutorial integrado flex_+_java_+_blazeds
Tutorial integrado flex_+_java_+_blazeds
 
Tecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEBTecnologia em Redes - Servidor WEB
Tecnologia em Redes - Servidor WEB
 
Servidores Web
Servidores WebServidores Web
Servidores Web
 
Apresentação servidores de aplicação
Apresentação   servidores de aplicaçãoApresentação   servidores de aplicação
Apresentação servidores de aplicação
 
Servidores Web
Servidores Web Servidores Web
Servidores Web
 

Semelhante a Mule ESB teste: Teste unitário e funcional

BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test ManagerAlan Carlos
 
Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Danilo Pinotti
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de testeMarcos Pessoa
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoSandy Maciel
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Strutseduan
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSFabrício Campos
 
ybr789try
ybr789tryybr789try
ybr789tryteste
 
Testes de software
Testes de softwareTestes de software
Testes de softwareteste
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
ALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteAlan Carlos
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de TestesUFPA
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Diego Pacheco
 

Semelhante a Mule ESB teste: Teste unitário e funcional (20)

BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Workshop - Plano de Testes End to End com o Microsoft Test Manager
Workshop   - Plano de Testes End to End com o Microsoft Test ManagerWorkshop   - Plano de Testes End to End com o Microsoft Test Manager
Workshop - Plano de Testes End to End com o Microsoft Test Manager
 
Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
Tipos de automação de teste
Tipos de automação de testeTipos de automação de teste
Tipos de automação de teste
 
Noções em teste de software e introdução a automação
Noções em teste de software e introdução a automaçãoNoções em teste de software e introdução a automação
Noções em teste de software e introdução a automação
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Teste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATSTeste de Performance - 3º Encontro da ALATS
Teste de Performance - 3º Encontro da ALATS
 
ybr789try
ybr789tryybr789try
ybr789try
 
Testes de software
Testes de softwareTestes de software
Testes de software
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Testes de Software.ppt
Testes de Software.pptTestes de Software.ppt
Testes de Software.ppt
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
ALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um IncidenteALM e Operações - Workshop - Como Diagnosticar um Incidente
ALM e Operações - Workshop - Como Diagnosticar um Incidente
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Engenharia de Testes
Engenharia de TestesEngenharia de Testes
Engenharia de Testes
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 

Mais de Jeison Barros

Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1Jeison Barros
 
O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soapJeison Barros
 
Restful considerada prejudicial - parte 1
Restful considerada prejudicial -  parte 1Restful considerada prejudicial -  parte 1
Restful considerada prejudicial - parte 1Jeison Barros
 
Restful considerada prejudicial parte 2
Restful considerada prejudicial   parte 2Restful considerada prejudicial   parte 2
Restful considerada prejudicial parte 2Jeison Barros
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e designJeison Barros
 
Transformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonTransformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonJeison Barros
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcJeison Barros
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosJeison Barros
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Jeison Barros
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Jeison Barros
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdlJeison Barros
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e mavenJeison Barros
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Jeison Barros
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationJeison Barros
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Jeison Barros
 
Relatório analytics de mula tempo de execução usando splunk
Relatório analytics de mula tempo de execução usando splunkRelatório analytics de mula tempo de execução usando splunk
Relatório analytics de mula tempo de execução usando splunkJeison Barros
 
Substituindo o request message no mule
Substituindo o request message no muleSubstituindo o request message no mule
Substituindo o request message no muleJeison Barros
 
Usando seu codigo java no mule part 2
Usando seu codigo java no mule part 2Usando seu codigo java no mule part 2
Usando seu codigo java no mule part 2Jeison Barros
 

Mais de Jeison Barros (20)

Pdfteste
PdftestePdfteste
Pdfteste
 
Introdução a RAML - parte 1
Introdução a RAML -  parte 1Introdução a RAML -  parte 1
Introdução a RAML - parte 1
 
O básico do uso de rest vs soap
O básico do uso de rest vs soapO básico do uso de rest vs soap
O básico do uso de rest vs soap
 
Restful considerada prejudicial - parte 1
Restful considerada prejudicial -  parte 1Restful considerada prejudicial -  parte 1
Restful considerada prejudicial - parte 1
 
Restful considerada prejudicial parte 2
Restful considerada prejudicial   parte 2Restful considerada prejudicial   parte 2
Restful considerada prejudicial parte 2
 
Estratégia api e design
Estratégia api e designEstratégia api e design
Estratégia api e design
 
Transformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para jsonTransformando eficientemente resultados de uma consulta jdbc para json
Transformando eficientemente resultados de uma consulta jdbc para json
 
Rest api vs SOAP
Rest api vs SOAPRest api vs SOAP
Rest api vs SOAP
 
Conectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbcConectando seu banco de dados usando jdbc
Conectando seu banco de dados usando jdbc
 
Habilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dadosHabilidades necessárias para integrar aplicativos e dados
Habilidades necessárias para integrar aplicativos e dados
 
Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2Qual integration framework você deve usar parte 2
Qual integration framework você deve usar parte 2
 
Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1Qual integration framework você deve usar parte 1
Qual integration framework você deve usar parte 1
 
Consumindo soap wsdl
Consumindo soap wsdlConsumindo soap wsdl
Consumindo soap wsdl
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e maven
 
Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2Mule esb com framework cucumber part 2
Mule esb com framework cucumber part 2
 
Fluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplicationFluxo dinâmicos usando spring aplication
Fluxo dinâmicos usando spring aplication
 
Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2Data mapping com Groovy - Part 2
Data mapping com Groovy - Part 2
 
Relatório analytics de mula tempo de execução usando splunk
Relatório analytics de mula tempo de execução usando splunkRelatório analytics de mula tempo de execução usando splunk
Relatório analytics de mula tempo de execução usando splunk
 
Substituindo o request message no mule
Substituindo o request message no muleSubstituindo o request message no mule
Substituindo o request message no mule
 
Usando seu codigo java no mule part 2
Usando seu codigo java no mule part 2Usando seu codigo java no mule part 2
Usando seu codigo java no mule part 2
 

Mule ESB teste: Teste unitário e funcional

  • 1. Mule ESB Teste: Teste unitario e funcional – Parte 1 Abstrato ensaios, tal como geralmente reconhecido é uma parte importante do processo de desenvolvimento de software. Os testes devem ser aplicadas durante cada fase do processo de desenvolvimento de software de testes de desenvolvedor para testes de aceitação. Em engenharia de software ternos de teste abrangentes e automatizadas irá garantir a qualidade do software e pode fornecer uma rede de segurança para alterações de regressão e de incompatibilidade. Em projetos de integração ESB Mule essas mesmas questões surgem. Componentes usados nos fluxos de mula, os próprios fluxos e a integração de fluxos em um contexto de sistema precisa ser testado. Este artigo é o primeiro de uma série de artigos sobre ensaio de projectos Mule ESB em todos os níveis. Ele está se concentrando em componentes menores em um projeto de mula que são testados com a unidade e testes funcionais. Teste de Software - A pirâmide de teste
  • 2. Antes de mergulhar no assunto, vamos dar uma olhada no contexto de testes. Idealmente testes de projetos de software é construído de baixo para cima. Começando com uma grande base de caso de teste de testes de unidade automatizados para os menores componentes que compõem o aplicativo inteiro juntos. Subindo através de camadas de arquitetura o número de casos de teste diminui para componentes maiores, porque eles são composições dos componentes já testados. Atingindo finalmente o topo da pirâmide em que a supervisão manual ou testes manuais formam o topo da pirâmide testar a aplicação como um todo [1]. Source: http://watirmelon.com/2012/01/31/introducing-the-software-testing-ice- cream-cone/ Automated testing pyramid testes unitários No mais baixo nível testes unitários verificar a funcionalidade correta de classes. Essas classes podem ser em um projeto de mula simples extensões e personalizações do quadro Mule. Exemplos incluem:
  • 3. • Transformadores personalizadas • Os componentes personalizados • avaliadores expressão personalizada • E, em geral, todos os beans Spring que um pedido de mula vai usar. Tipicamente, em um projeto de multi módulo estes feijões são parte de uma dependência e, portanto, são testados separadamente na dependência construída. Os testes de unidade em um sentido clássico pode testar a funcionalidade de classes personalizadas sem disparar até Mule. Uma classe POJO simples e é caso de teste que contém lógica de transformação cliente poderia ter esta aparência: public class CustomerTransformationComponent { public Map<String, Object> tranformCustomer(Customer customer) { Map<String, Object> returnMap = Maps.newHashMap(); returnMap.put("name", customer.getName()); // Fields mapping // ... return returnMap; } } public class CustomerTranformationComponentTest { @Test public testTransform() { Customer testCustomer = new Customer(); // Create test data Map<String, Object> customerMap = new CustomerTransformationCompone nt() .tranformCustomer(testCustomer); // Assert test data } }
  • 4. Quando a funcionalidade de classes personalizadas requer um contexto de mula do Quadro Mule fornece um Kit de Teste de Compatibilidade (TCK) para as extensões de teste e personalizações [3]. Para cada tipo de componente Mule há uma classe pai abstrato que é derivado de org.mule.tck.junit4.AbstractMuleTestCase. Eles estão localizados em mule-core-3.5.2-tests.jar para Mule version 3.5.2. Por exemplo, um componente Java que implementa a interface Mule mobilizável com uma lógica complexa confiando no Contexto Mule pode ser testada com as classes de teste acima mencionados: public class CustomerComponent implements Callable { @Autowired public CustomerService service; @Overwrite public Object onCall(MuleEventContext eventContext) throws Exception { String customerId = (String) eventContext.getMessage().getPayload() ; Customer customer = service.getCustomer(customerId); Map<String, Object> customerDetails = transformCustomer(customer); return customerDetails; } } public class CustomerComponentTest extends SimpleJavaComponentTestCase { @Test public testOnCall() { // Create test data MuleEvent event = getTestEvent(payload, muleContext); new CustomerComponent().onCall(new DefaultMuleEventContext(event)); // Assert test data } } Estes testes unitários são benéficos para as seguintes razões: • componentes testados com um caso de teste TCK assegurar que o comportamento comum do componente é compatível com o quadro de mula.
  • 5. • Usando um caso de teste TCK permite que o desenvolvedor se concentrar em escrever testes para o comportamento específico do seu componente. • Onde teste de um método na API de componentes não pode ser testada pelo caso de teste TCK, os casos de teste fornece um método abstrato para o teste, garantindo os testes de desenvolvedor todas as áreas do componente. • O TCK fornece um modelo de teste padrão que é um simples conjunto de classes de teste. O desenvolvedor não precisa se preocupar em escrever novas classes de teste para os seus casos de teste a cada vez. Por exemplo. o ciclo de vida de mula de um componente é automaticamente testada. Teste Funcional Mule Quando se trata de testar a interação de componentes entre si em sub fluxos ou "simples" flui testes funcionais são a maneira recomendada de teste [4]. Porque Mule ESB é leve e facilmente incorporáveis na testa o uso de classe theorg.mule.tck.junit4.FunctionalTestCase do TCK é recomendado para testar peças ou fluxos inteiros. Isto é feito através da criação de uma unidade de teste, que é derivada a partir desta classe que vai proporcionar uma instância mula nivelado com um contexto da mula para efectuar testes funcionais destes fluxos mula. A ênfase de tais testes é os seguintes aspectos de tais fluxos: • funcionalidade da mensagem corre-se
  • 6. • manipulação de Validação e roteamento baseado em regras dentro destes fluxos • E a sua manipulação de erro Por exemplo, uma sub fluxo que é suposto ser chamado poderia ser assim: <sub-flow name="subFlow" doc:name="subFlow"> <component class="de.codecentric.example.CustomerComponent" doc:name="Ja va"/> </sub-flow> Para ser capaz de chamar essa sub fluxo de embrulhar a chamada com um ponto final VM e guardá-lo em um arquivo de teste de recursos XML: <flow name="TestFlow" doc:name="TestFlow"> <vm:inbound-endpoint exchange-pattern="request-response" path="TestFlow" doc:name=" oint"/> <flow-ref name="subFlow" doc:name="Call sub flow for testing"/> </flow> Os testes unitários correspondentes ficaria assim: public class SubFlowTest extends FunctionalTestCase { @Test public void testFlow() throws Exception{ MuleClient client = muleContext.getClient(); String inputPayload = "550e8400-e29b-11d4-a716-446655440000"; // Create test data MuleMessage reply = client.send("vm://TestFlow", inputPayload, null , 5000); assertNotNull(reply); assertNotNull(reply.getPayload()); // Assert test data } @Override protected String[] getConfigFiles() { return new String[]{"./src/test/app/sub-flow-test.xml", "./src/main/app/sub-flow.xml"}; } }
  • 7. Substituindo o protected String[] getConfigFiles() método fornece o caso de teste os arquivos de configuração de configuração e da mola mula necessários. Recomendamos para dividir a descrição xml produção e fornecer a configuração XML de teste em um arquivo XML separat que só é usado em testes específicos. Este é um exemplo simples como o fluxo pode ser testada sem zombando ou alterar os testes internamente. Mule fornece uma maneira de adicionar <test:component/> componentes em um fluxo para os testes que fornece zombeteiros e funcionalidade de teste. Nós não preferem deste modo porque a descrição fluxo será misturado com informações de teste. Recomendamos o uso de tais casos, a biblioteca MUNIT que é descrito no artigo seguinte blogue. Testando o (sub) fluxos usando uma mula incorporado e com uma clara separação entre o teste e descrição do fluxo de produção oferece os seguintes benefícios: • Configurações e fluxos pode ser testado isoladamente um do outro o que proporcionará uma separação mais limpa de testes e reduzir o tamanho de cada caso de ensaio. Os erros podem ser identificados deste modo mais focada, porque eles podem ser localizados em casos de teste explícitos. • Não se pretende testar novamente componentes padrão da mula, porque pode ser assumido que eles já são testados exaustivamente. Portanto, somente certos caminhos e componentes de fluxos criados pelos desenvolvedores são necessários para o teste. • Os casos de teste precisa fornecer uma infra-estrutura de teste própria que é feita de preferência de nos componentes de infra-estrutura de memória por exemplo VM como um transporte, ActiveMQ para JMS ou
  • 8. H2 como um banco de dados. Isso é necessário porque o ambiente de produção pode não ser sempre fornecida automatizada ou incorporado para um teste de unidade devido a licença, recurso ou motivos de desempenho. • Reutilizar entre os testes, por exemplo, da infra-estrutura em memória pode ser aumentada fornecendo a configuração apenas uma vez para todos os casos de teste. Conclusão Nós demos neste artigo do blog uma introdução para os primeiros passos no teste de aplicativos da mula. A partir descrevendo como no menor componentes da camada de arquitectura e (sub) flui de uma aplicação da mula pode ser testado e que beneficiam ele produz. Nós descrito para o efeito testes de unidade clássicos com JUnit no âmbito contexto TCK mula e os testes funcionais para a TCK. Estes testes podem ser encontrados em aplicações módulo mula individuais ou em bibliotecas que contêm componentes e sub-fluxos que são utilizados em aplicações multi módulo mula.