Concordion - Guia Rápido
O que é Concordion?
Concordion é uma ferramenta poderosa para escrever e gerenciar testes de aceitação automatizados em projetos baseados em Java. Ele se integra diretamente com a estrutura JUnit, tornando-o pronto para ser usado com todos os IDEs populares baseados em JAVA, como Netbeans, Eclipse, IntelliJ IDEA.
Especificação de software ativa
A especificação ativa de software é uma maneira de especificar o comportamento de um recurso. Ele também fornece uma maneira de implementar e verificar a especificação do software por meio de uma conexão com o sistema em desenvolvimento.
Uma especificação ativa no Concordion é composta por duas partes:
Um documento de requisitos escrito de forma limpa que descreve a funcionalidade desejada escrita usando XHTML. As especificações baseadas em XHTML contêm descrições da funcionalidade fornecida com exemplos de teste de aceitação. Os dados de exemplo são marcados com tags HTML simples.
Os testes de aceitação são escritos em linguagem Java chamada código de fixação. Usando uma extensão Concordion de um caso de teste JUnit padrão, o teste é implementado. É responsabilidade do Fixture Code encontrar os dados do exemplo marcados por tag e utilizá-los para verificar o software em desenvolvimento.
Saída do Cncordion
Quando os testes de especificação ativa do Concordion são executados, os arquivos XHTML outpu mostram a especificação original e os resultados do teste. Os testes bem-sucedidos são destacados com a cor "verde" e os testes com falha são destacados com "vermelho". Como qualquer alteração no sistema resultará em reprovação no teste, o que ajuda a identificar que as especificações devem ser atualizadas, a Concordion denomina essas especificações como especificações ativas. Portanto, as especificações estão sempre atualizadas.
Características principais
A seguir estão os principais recursos do Concordion:
Specifications as documentation- A especificação de concordância sendo altamente legível pode ser usada como documentação ativa do sistema. Como as especificações baseadas em Concordion são escritas em HTML, esses documentos podem ter hiperlinks.
Specifications are live- A especificação do Concordion contém exemplos funcionais de comportamento que são executados no sistema. As especificações são codificadas por cores para que qualquer um possa ver se os exemplos estão funcionando ou não. Executar as especificações do Concordion regularmente torna a documentação atualizada.
Separate "what?" from "how?"- A especificação de concordância ajuda a manter a separação entre a implementação e o comportamento necessário do sistema. Ele fornece flexibilidade para que a implementação possa ser alterada posteriormente.
Simple to learn- A biblioteca Concordion foi projetada mantendo a curva de aprendizado curta e concisa. Ele tem poucos comandos para aprender e os exemplos são automatizados usando testes JUnit para que os testes possam ser executados com facilidade e possam ser integrados facilmente a projetos existentes.
Powerful Customization- Concordion fornece extensões API que permite adicionar funcionalidade. Por exemplo, planilhas do Excel podem ser usadas como especificações, capturas de tela podem ser adicionadas à saída, informações de registro podem ser exibidas e muito mais.
Este tutorial irá guiá-lo sobre como preparar um ambiente de desenvolvimento para iniciar seu trabalho com Spring Framework. Este tutorial também ensinará como configurar JDK, Tomcat e Eclipse em sua máquina antes de configurar o Spring Framework:
Etapa 1 - Configure o Java Development Kit (JDK):
Você pode baixar a versão mais recente do SDK do site Java da Oracle: Java SE Downloads . Você encontrará instruções para instalar o JDK nos arquivos baixados, siga as instruções fornecidas para instalar e configurar a configuração. Por fim, defina as variáveis de ambiente PATH e JAVA_HOME para se referir ao diretório que contém java e javac, normalmente java_install_dir / bin e java_install_dir respectivamente.
Se você estiver executando o Windows e instalou o JDK em C: \ jdk1.7.0_75, deverá inserir a seguinte linha em seu arquivo C: \ autoexec.bat.
set PATH=C:\jdk1.7.0_75\bin;%PATH%
set JAVA_HOME=C:\jdk1.7.0_75
Alternativamente, no Windows NT / 2000 / XP, você também pode clicar com o botão direito do mouse em Meu computador, selecionar Propriedades, Avançado e Variáveis de ambiente. Em seguida, você atualizaria o valor de PATH e pressionaria o botão OK.
No Unix (Solaris, Linux, etc.), se o SDK for instalado em /usr/local/jdk1.7.0_75 e você usar o shell C, você deve colocar o seguinte em seu arquivo .cshrc.
setenv PATH /usr/local/jdk1.7.0_75/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.7.0_75
Alternativamente, se você usar um Ambiente de Desenvolvimento Integrado (IDE) como Borland JBuilder, Eclipse, IntelliJ IDEA ou Sun ONE Studio, compile e execute um programa simples para confirmar que o IDE sabe onde você instalou o Java, caso contrário, faça a configuração adequada conforme o documento fornecido do IDE.
Etapa 2 - Configurar IDE Eclipse
Todos os exemplos neste tutorial foram escritos usando Eclipse IDE. Então, eu sugiro que você tenha a versão mais recente do Eclipse instalada em sua máquina.
Para instalar o Eclipse IDE, baixe os binários mais recentes do Eclipse em http://www.eclipse.org/downloads/. Depois de fazer o download da instalação, descompacte a distribuição binária em um local conveniente. Por exemplo, em C: \ eclipse no windows, ou / usr / local / eclipse no Linux / Unix e finalmente defina a variável PATH apropriadamente.
O Eclipse pode ser iniciado executando os seguintes comandos na máquina Windows ou você pode simplesmente clicar duas vezes em eclipse.exe
%C:\eclipse\eclipse.exe
O Eclipse pode ser iniciado executando os seguintes comandos na máquina Unix (Solaris, Linux, etc.):
$/usr/local/eclipse/eclipse
Após uma inicialização bem-sucedida, se tudo estiver bem, ele deverá exibir o seguinte resultado:
Etapa 3: Baixe o arquivo Junit
Baixe a versão mais recente do arquivo JUnit jar em http://www.junit.org. No momento em que escrevi este tutorial, baixei o Junit-4.10.jar e o copiei para a pasta C: \> JUnit.
SO | Nome do arquivo |
---|---|
janelas | junit4.10.jar |
Linux | junit4.10.jar |
Mac | junit4.10.jar |
Etapa 4: definir o ambiente JUnit
Colocou o JUNIT_HOMEvariável de ambiente para apontar para o local do diretório base onde o jar JUNIT está armazenado em sua máquina. Supondo que armazenamos junit4.10.jar na pasta JUNIT em vários sistemas operacionais da seguinte maneira.
SO | Resultado |
---|---|
janelas | Defina a variável de ambiente JUNIT_HOME para C: \ JUNIT |
Linux | export JUNIT_HOME = / usr / local / JUNIT |
Mac | export JUNIT_HOME = / Biblioteca / JUNIT |
Etapa 5: definir a variável CLASSPATH
Colocou o CLASSPATHvariável de ambiente para apontar para a localização do jar JUNIT. Supondo que armazenamos junit4.10.jar na pasta JUNIT em vários sistemas operacionais da seguinte maneira.
SO | Resultado |
---|---|
janelas | Defina a variável de ambiente CLASSPATH como% CLASSPATH%;% JUNIT_HOME% \ junit4.10.jar;.; |
Linux | export CLASSPATH =$CLASSPATH:$JUNIT_HOME / junit4.10.jar :. |
Mac | export CLASSPATH =$CLASSPATH:$JUNIT_HOME / junit4.10.jar :. |
Etapa 6 - Configurar bibliotecas de concordância
Agora, se tudo estiver bem, você pode continuar a configurar suas bibliotecas do Concordion. A seguir estão as etapas simples para baixar e instalar a estrutura em sua máquina.
Baixe a versão mais recente dos binários do framework Concordion em http://dl.bintray.com/concordion/downloads/concordion-1.5.1.zip.
No momento em que escrevi este tutorial, eu baixei o concordion-1.5.1 em minha máquina Windows e quando você descompactou o arquivo baixado, ele fornecerá a seguinte estrutura de diretório dentro de E: \ concordion-1.5.1 como segue.
lib - pasta da biblioteca
hamcrest-core-1.3.jar
junit-4.12.jar
ognl-2.6.9.jar
xom-1.2.5.jar
src - Pasta de código fonte
main
test
test-dummies
concordion-1.5.1.jar
Você encontrará todas as bibliotecas de dependências do Concordion no diretório E: \ concordion \ lib. Certifique-se de definir sua variável CLASSPATH neste diretório corretamente, caso contrário, você terá problemas ao executar seu aplicativo. Se você estiver usando o Eclipse, não é necessário definir CLASSPATH porque todas as configurações serão feitas por meio do Eclipse.
Depois de concluir esta última etapa, você está pronto para prosseguir para o seu primeiro exemplo de concordância, que verá no próximo capítulo.
Concordion - Primeira Aplicação
Vamos começar a programar com Concordion. Antes de começar a escrever seu primeiro exemplo usando o Concordion, você deve se certificar de que configurou o ambiente do Concordion corretamente, conforme explicado no tutorial Concordion - Configuração do ambiente . Também presumimos que você tenha um pouco de conhecimento prático do Eclipse IDE.
Então, vamos continuar a escrever um aplicativo Concordion simples que imprimirá o seguinte teste de aceitação -
Example
When Robert logs in the system, a greeting "Hello Robert!" is displayed.
Etapa 1 - Criar projeto Java
A primeira etapa é criar um projeto Java simples usando Eclipse IDE. Siga a opçãoFile → New → Project e finalmente selecione Java Projectassistente da lista de assistentes. Agora nomeie seu projeto comoConcordion usando a janela do assistente da seguinte forma -
Depois que seu projeto for criado com sucesso, você terá o seguinte conteúdo em seu Project Explorer -
Etapa 2 - Adicionar bibliotecas necessárias
Vamos adicionar a concordância e suas dependências em nosso projeto. Para fazer isso, clique com o botão direito no nome do seu projetoconcordion e depois siga as opções disponíveis no menu de contexto: Build Path → Configure Build Path para exibir a janela Java Build Path da seguinte forma -
Agora usa Add External JARs botão disponível em Libraries guia para adicionar o seguinte JAR principal da pasta Concordion.
- concordion-1.5.1
- hamcrest-core-1.3
- junit-4.12
- ognl-2.6.9
- xom-1.2.5
Etapa 3 - Criar arquivos de origem
Agora vamos criar arquivos de origem reais sob o concordionprojeto. Primeiro, precisamos criar um pacote chamadocom.tutorialspoint. Para fazer isso, clique com o botão direito emsrc na seção Package Explorer e siga a opção: New → Package.
A seguir, vamos criar o sistema .java arquivo no pacote com.tutorialspoint.
Aqui está o conteúdo de System.java arquivo -
package com.tutorialspoint;
public class System {
public String getGreeting(String userName){
return "Hello " + userName + "!";
}
}
Etapa 4 - Criar arquivos de especificação
Agora vamos criar arquivos de especificação reais sob o concordionprojeto. Primeiro, precisamos criar uma nova pasta de origem chamadaspecs. Esta pasta conterá arquivos de especificação como JUnitFixture ou executor de teste e arquivos html que são especificações. Agora precisamos criar um pacote chamadospecs.tutorialspoint. Para fazer isso, clique com o botão direito emspec na seção Package Explorer e siga a opção: New → Package.
Em seguida, vamos criar System.html e SystemFixture.javaarquivos no pacote specs.tutorialspoint. Depois disso, iremos adicionarconcordion.css sob a pasta de origem das especificações.
Aqui está o conteúdo do System.html arquivo -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type="text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to show greeting to logged in user:</p>
<div class = "example">
<h3>Example</h3>
<p>When <span concordion:set = "#userName">Robert</span>
logs in the system, a greeting "<span concordion:assertEquals = "getGreeting(#userName)">
Hello Robert!</span>" is displayed.</p>
</div>
</body>
</html>
Aqui está o conteúdo do SystemFixture.java arquivo -
package specs.tutorialspoint;
import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public String getGreeting(String userName){
return system.getGreeting(userName);
}
}
Aqui está o conteúdo do concordion.css arquivo -
* {
font-family: Arial;
}
body {
padding: 32px;
}
pre {
padding: 6px 28px 6px 28px;
background-color: #E8EEF7;
}
pre, pre *, code, code *, kbd {
font-family: Courier New, Courier;
font-size: 10pt;
}
h1, h1 * {
font-size: 24pt;
}
p, td, th, li, .breadcrumbs {
font-size: 10pt;
}
p, li {
line-height: 140%;
}
table {
border-collapse: collapse;
empty-cells: show;
margin: 8px 0px 8px 0px;
}
th, td {
border: 1px solid black;
padding: 3px;
}
td {
background-color: white;
vertical-align: top;
}
th {
background-color: #C3D9FF;
}
li {
margin-top: 6px;
margin-bottom: 6px;
}
.example {
padding: 6px 16px 6px 16px;
border: 1px solid #D7D7D7;
margin: 6px 0px 28px 0px;
background-color: #F7F7F7;
}
.example h3 {
margin-top: 8px;
margin-bottom: 8px;
font-size: 12pt;
}
.special {
font-style: italic;
}
.idea {
font-size: 9pt;
color: #888;
font-style: italic;
}
.tight li {
margin-top: 1px;
margin-bottom: 1px;
}
.commentary {
float: right;
width: 200px;
background-color: #ffffd0;
padding:8px;
border: 3px solid #eeeeb0;
margin: 10px 0px 10px 10px;
}
.commentary, .commentary * {
font-size: 8pt;
}
Existem dois pontos importantes a serem observados sobre o arquivo html de especificação e o acessório de teste -
System.html é o arquivo html de especificação que usa o namespace de concordância.
<html xmlns:concordion="http://www.concordion.org/2007/concordion">
System.html usa o comando concordion: set para definir um valor de variáveis temporárias userName como Robert. Aqui, userName é o parâmetro a ser passado para o método getGreeting da fixação do sistema.
When <span concordion:set="#userName">Robert</span> logs in the system
System.html usa o comando concordion: assertEquals para verificar a saída da função getGreeting (userName) como Hello Robert !.
a greeting "<span concordion:assertEquals="getGreeting(#userName)">
Hello Robert!</span>" is displayed.
SystemFixture é um dispositivo de teste JUnit anotado com ConcordionRunner.class.
@RunWith(ConcordionRunner.class)
public class SystemFixture {
SystemFixture tem um método getGreeting que retorna saudações ao usuário.
public String getGreeting(String userName){
return system.getGreeting(userName);
}
Etapa 5 - Executando o programa
Clique com o botão direito na área de conteúdo de SystemFixture e selecione Run as > JUnit Test Case. Você verá a seguinte saída com o sucesso do junit.
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Parabéns, você criou seu primeiro teste de aceitação de concordância com sucesso. Além disso, vamos começar a fazer algo mais interessante nos próximos capítulos.
Concordion - comando set
O comando Concordion set é usado para armazenar variáveis temporárias que podem ser usadas em outros comandos Concordion.
Considere o seguinte requisito -
The Sum of two numbers 2 and 3 will be 5.
Se quisermos que os números 2 e 3 sejam como parâmetros e os passemos para a função soma como parâmetro para que possam ser verificados em relação ao resultado retornado pelo sistema, então podemos usar concordion: set command dentro de tags span ao redor dos números.
<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span>
and <span concordion:set = "#secondNumber">3</span> will be
<span concordion:assertEquals = "sum(#firstNumber, #secondNumber)">5
</span>.</p>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #firstNumber como o valor "2" e #secondNumber como o valor "3" e, em seguida, chamará o método sum () com parâmetros como #firstNumber e #secondNumber e verifique se o resultado é igual a "5".
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
public int sum(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public int sum(int firstNumber, int secondNumber) {
return system.sum(firstNumber, secondNumber);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>Calculator Specifications</h1>
<p>We are building online calculator support in our website.</p>
<p>Following is the requirement to add two numbers:</p>
<div class = "example">
<h3>Example</h3>
<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span>
and <span concordion:set = "#secondNumber">3</span> will be
<span concordion:execute = "#result = sum(#firstNumber, #secondNumber)"></span>
<span concordion:assertEquals = "#result">5</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como um teste JUnit. Se tudo estiver bem com seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME>1\ADMINI>1\LOCALS>1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é o resultado da execução do teste de concordância.
Concordion - Comando assertEquals
O comando Concordion assertEquals é usado para verificar a propriedade do Java bean ou o resultado do método em relação a um valor especificado.
Considere o seguinte requisito -
The sum of two numbers 2 and 3 will be 5.
Se quisermos que os números 2 e 3 sejam como parâmetros e passá-los para a função soma como parâmetro para que possa ser verificado em relação ao resultado como 5 retornado pelo sistema, então podemos usar o comando concordion: assertEquals dentro da tag span ao redor da função sum .
<p>The Sum of two numbers <span concordion:set="#firstNumber">2</span>
and <span concordion:set="#secondNumber">3</span> will be
<span concordion:assertEquals="sum(#firstNumber, #secondNumber)">5</span>.</p>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #firstNumber como o valor "2" e #secondNumber como o valor "3" usando o comando set e, em seguida, chamará o método sum () com parâmetros como #firstNumber e #secondNumber e verifique se o resultado é igual a "5" usando o comando assertEquals.
Exemplo
Vamos colocar o Eclipse IDE em funcionamento e seguir as etapas a seguir para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
public int sum(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public int sum(int firstNumber, int secondNumber) {
return system.sum(firstNumber, secondNumber);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>Calculator Specifications</h1>
<p>We are building online calculator support in our website.</p>
<p>Following is the requirement to add two numbers:</p>
<div class = "example">
<h3>Example</h3>
<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span>
and <span concordion:set = "#secondNumber">3</span> will be
<span concordion:assertEquals = "sum(#firstNumber, #secondNumber)">5</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se estiver tudo bem com o seu aplicativo, ele mostrará o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Sucessos: 1, Falhas: 0
Concordion - comando assertTrue
O comando Concordion assertTrue é usado quando o aparelho precisa saber o resultado esperado para realizar um teste.
Considere o seguinte requisito -
User Name : Robert De
The User name starts with R.
The User name starts with S == false.
Se quisermos que um teste seja executado no nome do usuário, verifique se o nome do usuário começa com R ou não.
<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
with <b concordion:set = "#letter">R</b></span>.</p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
with <b concordion:set = "#letter">S</b></span>.</p>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #userName como o valor "Robert De". Em seguida, ele verificará se o userName começa com a letra especificada pela variável #letter definida no próximo comando.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged in user to
its constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
with <b concordion:set = "#letter">R</b></span>.</p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
with <b concordion:set = "#letter">S</b></span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 1
System.html é a saída da execução do teste Concordion.
Concordion - Comando assertFalse
O comando Concordion assertFalse é usado quando o aparelho precisa saber o resultado esperado para realizar um teste.
Considere o seguinte requisito -
User Name : Robert De
The User name does not start with S.
Se quisermos que um teste seja executado no nome do usuário e verificar se o nome do usuário não começa com S.
<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertFalse = "#userName.startsWith(#letter)">does not start
with <b concordion:set = "#letter">S</b></span>.</p>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #userName como o valor "Robert De". Então, ele irá verificar se o userName começa com a letra especificada pela variável #letter definida no próximo comando.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged in user to its
constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertFalse = "#userName.startsWith(#letter)">
does not start with <b concordion:set = "#letter">
S</b></span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - executar Comando
O comando de execução de concordância é usado para executar a operação de fixação de concordância. Considere o seguinte requisito -
The sum of two numbers 2 and 3 will be 5.
Se quisermos escrever uma especificação para uma função de soma que aceitará dois números e produzirá sua soma, então a especificação será a seguinte -
<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> and
<span concordion:set = "#secondNumber">3</span> will be
<span concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
</span><span concordion:assertEquals = "#result">5</span>.</p>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #firstNumber como o valor "2" e #secondNumber como o valor "3" e, em seguida, executará o método sum () com parâmetros como #firstNumber e #secondNumber usando o execute e defina o resultado na variável #result e verifique se a variável #result é igual a "5".
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
public int sum(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public int sum(int firstNumber, int secondNumber) {
return system.sum(firstNumber, secondNumber);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>Calculator Specifications</h1>
<p>We are building online calculator support in our website.</p>
<p>Following is the requirement to add two numbers:</p>
<div class = "example">
<h3>Example</h3>
<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span>
and <span concordion:set = "#secondNumber">3</span> will be
<span concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
</span><span concordion:assertEquals = "#result">5</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Retornando Objeto
O comando de execução de concordância pode ser usado para obter o resultado de um comportamento na forma de objeto, usando o qual podemos obter várias saídas de um comportamento. Por exemplo, considere o seguinte requisito -
The full name Robert De is to be broken into first name Robert and last name De.
Aqui, precisamos ter uma função de divisão que aceita um nome de usuário e retorna um objeto de resultado com o primeiro nome e o sobrenome como propriedades para que possamos usá-los.
Se quisermos escrever uma especificação para tal função de divisão que irá esperar um nome de usuário e produzir um objeto de resultado, então o seguinte será a especificação -
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert
De</span> is to be broken into first name
<span concordion:assertEquals = "#result.firstName">Robert</span> and last name
<span concordion:assertEquals = "#result.lastName">De</span>.</p>
Quando o Concordion analisa o documento, ele define o valor da variável especial #TEXT como o valor do elemento atual como "Robert De" e o passa para a função de divisão. Em seguida, ele executará o método split () com parâmetros como #TEXT usando o comando execute e definirá o resultado na variável #result e, usando o objeto de resultado, imprimirá as propriedades firstName e lastName como saída.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Crie um projeto com o nome concordion e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado. |
2 | Adicione as bibliotecas Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System , Result sob o pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo Result.java -
package com.tutorialspoint;
public class Result {
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
public Result split(String userName){
Result result = new Result();
String[] words = userName.split(" ");
result.setFirstName(words[0]);
result.setLastName(words[1]);
return result;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import com.tutorialspoint.Result;
import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public Result split(String userName){
return system.split(userName);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged in user to its
constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert
De</span> is to be broken into first name <span
concordion:assertEquals = "#result.firstName">Robert</span> and last name <span
concordion:assertEquals = "#result.lastName">De</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Returning Map
O comando Concordion execute pode ser usado para obter o resultado de um comportamento na forma de um mapa, usando o qual podemos obter várias saídas de um comportamento. Por exemplo, considere o seguinte requisito -
The full name Robert De is to be broken into its first name Robert and last name De.
Aqui precisamos ter uma função derramada que aceita um nome de usuário e retorna um objeto Map tendo o firstName e o lastName como suas chaves com valores correspondentes para que possamos usá-los.
Se quisermos escrever uma especificação para tal função de divisão que aceitará um nome de usuário e produzirá um objeto de resultado, então o seguinte será a especificação -
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert
De</span> is to be broken into first name <span
concordion:assertEquals = "#result.firstName">Robert</span> and last name <span
concordion:assertEquals = "#result.lastName">De</span>.</p>
Quando o Concordion analisa o documento, ele definirá o valor da variável especial #TEXT como o valor do elemento atual como "Robert De" e o passará para a função de divisão. Em seguida, ele executará o método split () com parâmetros como #TEXT usando o comando execute e definirá o resultado na variável #result e, usando o mapa de resultados, imprimirá os valores firstName e lastName como saída.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
import java.util.HashMap;
import java.util.Map;
public class System {
public Map split(String userName){
Map<String, String> result = new HashMap<String, String>();
String[] words = userName.split(" ");
result.put("firstName", words[0]);
result.put("lastName", words[1]);
return result;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import java.util.Map;
import com.tutorialspoint.Result;
import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public Map<String, String> split(String userName){
return system.split(userName);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged in user to its
constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert
De</span> is to be broken into first name <span
concordion:assertEquals = "#result.firstName">Robert</span> and last name
<span concordion:assertEquals = "#result.lastName">De</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Retornando MultiValueResult
O comando Concordion execute pode ser usado para obter o resultado de um comportamento na forma de um mapa, usando o qual podemos obter várias saídas de um comportamento. Por exemplo, considere o seguinte requisito -
The full name Robert De is to be broken into its first name Robert and last name De.
Aqui, precisamos ter uma função de divisão que aceita um nome de usuário e retorna um objeto Map tendo firstName e lastName como suas chaves com seus valores correspondentes para que possamos usá-los.
Se quisermos escrever uma especificação para essa função de divisão que aceitará um nome de usuário e produzirá um objeto de resultado, então a especificação seria a seguinte -
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert
De</span> is to be broken into first name
<span concordion:assertEquals = "#result.firstName">Robert</span> and last name
<span concordion:assertEquals = "#result.lastName">De</span>.</p>
Quando o Concordion analisa o documento, ele definirá o valor da variável especial #TEXT como o valor do elemento atual como "Robert De" e o passará para a função de divisão. Em seguida, ele executará o método split () com parâmetros como #TEXT usando o comando execute e definirá o resultado na variável #result e, usando o mapa de resultados, imprimirá os valores firstName e lastName como saída.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Crie um projeto com o nome concordion e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
import org.concordion.api.MultiValueResult;
public class System {
public MultiValueResult split(String userName){
MultiValueResult result = new MultiValueResult();
String[] words = userName.split(" ");
result.with("firstName", words[0]).with("lastName", words[1]);
return result;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public MultiValueResult split(String userName){
return system.split(userName);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged in
user to its constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert De</span>
is to be broken into first name <span
concordion:assertEquals = "#result.firstName">Robert</span> and last name <span
concordion:assertEquals = "#result.lastName">De</span>.</p>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Executar na Mesa
O comando de execução de concordância pode ser usado para executar a operação do acessório de concordância de maneira repetitiva. Por exemplo, será útil se quisermos ilustrar um requisito com vários exemplos na forma de uma tabela.
Considere o seguinte requisito -
<table>
<tr><th>First Number</th><th>Second Number</th><th>Sum</th></tr>
<tr><td>2</td><td>3</td><td>5</td></tr>
<tr><td>4</td><td>5</td><td>9</td></tr>
</table>
Se quisermos escrever uma especificação para uma função de soma que aceitará dois números e produzirá sua soma, então a especificação seria a seguinte -
<table>
<tr><th>First Number</th><th>Second Number</th><th>Sum</th></tr>
<tr concordion:execute = "#result = sum(#fullName)">
<td concordion:set = "#firstNumber">2</td>
<td concordion:set = "#secondNumber">3</td>
<td concordion:assertEquals = "#result">5</td>
</tr>
<tr concordion:execute = "#result = sum(#fullName)">
<td concordion:set = "#firstNumber">4</td>
<td concordion:set = "#secondNumber">5</td>
<td concordion:assertEquals = "#result">9</td>
</tr>
</table>
Quando o Concordion analisa o documento, ele definirá uma variável temporária #firstNumber como o valor "2" e #secondNumber como o valor "3". Em seguida, ele executará o método sum () com parâmetros como #firstNumber e #secondNumber usando o comando execute e definirá o resultado na variável #result e verificará se a variável #result é igual a "5". Este processo é repetido para cada elemento de linha da tabela.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
public class System {
public int sum(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public int sum(int firstNumber, int secondNumber) {
return system.sum(firstNumber, secondNumber);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>Calculator Specifications</h1>
<p>We are building online calculator support in our website.</p>
<p>Following is the requirement to add two numbers:</p>
<div class = "example">
<h3>Example</h3>
<table>
<tr>
<th>First Number</th>
<th>Second Number</th>
<th>Sum</th>
</tr>
<tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
<td concordion:set = "#firstNumber">2</td>
<td concordion:set = "#secondNumber">3</td>
<td concordion:assertEquals = "#result">5</td>
</tr>
<tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
<td concordion:set = "#firstNumber">4</td>
<td concordion:set = "#secondNumber">5</td>
<td concordion:assertEquals = "#result">9</td>
</tr>
</table>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Executar na Lista
O comando de execução de concordância pode ser usado para executar a operação do acessório de concordância de maneira repetitiva. Por exemplo, será útil se quisermos ilustrar um requisito com vários exemplos na forma de uma lista.
Considere o seguinte requisito -
<ul>
<li>The full name Robert De is to be split as
<ul>
<li>Robert</li>
<li>De</li>
</ul>
</li>
<li>The full name John Diere is to be split as
<ul>
<li>John</li>
<li>Diere</li>
</ul>
</li>
</ul>
Se quisermos escrever uma especificação para uma função de divisão que irá dividir um nome em seu nome e sobrenome, então a especificação seria a seguinte -
<ul>
<li>The full name <span concordion:execute = "#result = split(#TEXT)">
Robert De</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">Robert</span></li>
<li><span concordion:assertEquals = "#result.lastName">De</span></li>
</ul>
</li>
<li>The full name <span concordion:execute = "#result = split(#TEXT)">
John Diere</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">John</span></li>
<li><span concordion:assertEquals = "#result.lastName">Diere</span></li>
</ul>
</li>
</ul>
Quando o Concordion analisa o documento, ele definirá o valor da variável especial #TEXT como o valor do elemento atual como "Robert De" e o passará para a função de divisão. Em seguida, ele executará o método split () com parâmetros como #TEXT usando o comando execute e definirá o resultado na variável #result e, usando result, imprimirá os valores firstName e lastName como saída.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
import org.concordion.api.MultiValueResult;
public class System {
public MultiValueResult split(String userName){
MultiValueResult result = new MultiValueResult();
String[] words = userName.split(" ");
result.with("firstName", words[0]).with("lastName", words[1]);
return result;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public MultiValueResult split(String userName){
return system.split(userName);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to split full name of a logged
in user to its constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<ul>
<li>The full name <span concordion:execute = "#result = split(#TEXT)">
Robert De</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">
Robert</span></li>
<li><span concordion:assertEquals = "#result.lastName">
De</span></li>
</ul>
</li>
<li>The full name <span concordion:execute ="#result = split(#TEXT)">
John Diere</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">
John</span></li>
<li><span concordion:assertEquals = "#result.lastName">
Diere</span></li>
</ul>
</li>
</ul>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 4, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - comando verifyRows
O comando Concordion verifyRows pode ser usado para verificar o conteúdo de uma coleção retornada como resultado pelo sistema. Por exemplo, se configurarmos um conjunto de usuários no sistema e fizermos uma pesquisa parcial sobre eles, o sistema deverá retornar os elementos correspondentes, caso contrário, nossos testes de aceitação deverão falhar.
Considere o seguinte requisito -
<table>
<tr><th>Users</th></tr>
<tr><td>Robert De</td></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
<p>Search for J should return:</p>
<table>
<tr><th>Matching Users</th></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
Se quisermos escrever uma especificação para uma função de pesquisa que irá pesquisar e retornar uma coleção, a especificação será a seguinte -
<table concordion:execute = "addUser(#username)">
<tr><th concordion:set = "#username">Username</th></tr>
<tr><td>Robert De</td></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
<p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p>
<table concordion:verifyRows = "#username : search(#searchString)">
<tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
Quando o Concordion analisa o documento, ele executa addUser () em cada linha da primeira tabela e, em seguida, define o searchString como J. Em seguida, o Concordion executa a função de pesquisa que deve retornar um objeto Iterable com uma ordem de iteração previsível (por exemplo, um List, LinkedHashSet ou TreeSet), verifyRows é executado para cada item da coleção e executa o comando assertEquals.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie a classe Fixture SystemFixture sob o pacote specs.tutorialspoint . |
5 | Crie Specification html System.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class System {
private Set<String> users = new HashSet<String>();
public void addUser(String username) {
users.add(username);
}
public Iterable<String> search(String searchString) {
SortedSet<String> matches = new TreeSet<String>();
for (String username : users) {
if (username.contains(searchString)) {
matches.add(username);
}
}
return matches;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public void addUser(String username) {
system.addUser(username);
}
public Iterable<String> search(String searchString) {
return system.search(searchString);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online order tracking application.</p>
<p>Following is the requirement to add a partial search capability on user names:</p>
<div class = "example">
<h3>Example</h3>
<table concordion:execute = "addUser(#username)">
<tr><th concordion:set = "#username">Username</th></tr>
<tr><td>Robert De</td></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
<p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p>
<table concordion:verifyRows = "#username : search(#searchString)">
<tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr>
<tr><td>John Diere</td></tr>
<tr><td>Julie Re</td></tr>
</table>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
System.html é a saída da execução do teste Concordion.
Concordion - Executar Comando
O comando Concordion run pode ser usado para vincular várias especificações e exibi-las em uma página central. Este comando pode executar todas as especificações, enquanto exibe o fundo do link em verde / vermelho / cinza conforme apropriado.
Agora vamos criar duas especificações e vinculá-las. Estaremos reutilizando as especificações criadas nos capítulos Concordion - Execute on List e Concordion - Execute on Table como Especificações do Sistema e Especificações da Calculadora.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir as etapas fornecidas abaixo para criar um aplicativo Concordion -
Degrau | Descrição |
---|---|
1 | Criar um projeto com um nome concordion e criar um pacote com.tutorialspoint sob asrc pasta no projeto criado. |
2 | Adicione as bibliotecas do Concordion necessárias usando a opção Adicionar JARs externos conforme explicado no capítulo Concordion - Primeiro Aplicativo . |
3 | Crie a classe Java System no pacote com.tutorialspoint . |
4 | Crie classes de Fixture SystemFixture , CalculatorFixture sob o pacote specs.tutorialspoint . |
5 | Crie arquivos html de especificação System.html , Calculator.html sob o pacote specs.tutorialspoint . |
6 | A etapa final é criar o conteúdo de todos os arquivos Java e o arquivo de especificação e executar o aplicativo conforme explicado a seguir. |
Aqui está o conteúdo do arquivo System.java -
package com.tutorialspoint;
import org.concordion.api.MultiValueResult;
public class System {
public MultiValueResult split(String userName){
MultiValueResult result = new MultiValueResult();
String[] words = userName.split(" ");
result.with("firstName", words[0]).with("lastName", words[1]);
return result;
}
public int sum(int firstNumber, int secondNumber) {
return firstNumber + secondNumber;
}
}
A seguir está o conteúdo do arquivo SystemFixture.java -
package specs.tutorialspoint;
import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class SystemFixture {
System system = new System();
public MultiValueResult split(String userName){
return system.split(userName);
}
}
A seguir está o conteúdo do arquivo CalculatorFixture.java -
package specs.tutorialspoint;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;
@RunWith(ConcordionRunner.class)
public class CalculatorFixture {
System system = new System();
public int sum(int firstNumber, int secondNumber) {
return system.sum(firstNumber, secondNumber);
}
}
A seguir está o conteúdo do arquivo System.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>System Specifications</h1>
<p>We are building specifications for our online
order tracking application.</p>
<p>Following is the requirement to split full name of a
logged in user to its constituents by splitting name by whitespace:</p>
<div class = "example">
<h3>Example</h3>
<ul>
<li>The full name <span concordion:execute = "#result = split(#TEXT)">
Robert De</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">
Robert</span></li>
<li><span concordion:assertEquals = "#result.lastName">
De</span></li>
</ul>
</li>
<li>The full name <span concordion:execute = "#result = split(#TEXT)">
John Diere</span> is to be splited as
<ul>
<li><span concordion:assertEquals = "#result.firstName">
John</span></li>
<li><span concordion:assertEquals = "#result.lastName">
Diere</span></li>
</ul>
</li>
</ul>
</div>
<a concordion:run = "concordion" href = "Calculator.html">
Calculator Service Specifications</a>
</body>
</html>
A seguir está o conteúdo do arquivo Calculator.html -
<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
<head>
<link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
</head>
<body>
<h1>Calculator Specifications</h1>
<p>We are building online calculator support in our website.</p>
<p>Following is the requirement to add two numbers:</p>
<div class = "example">
<h3>Example</h3>
<table>
<tr>
<th>First Number</th>
<th>Second Number</th>
<th>Sum</th>
</tr>
<tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
<td concordion:set = "#firstNumber">2</td>
<td concordion:set = "#secondNumber">3</td>
<td concordion:assertEquals = "#result">5</td>
</tr>
<tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
<td concordion:set = "#firstNumber">4</td>
<td concordion:set = "#secondNumber">5</td>
<td concordion:assertEquals = "#result">9</td>
</tr>
</table>
</div>
</body>
</html>
Quando terminar de criar os arquivos de origem e de especificação, vamos executar o aplicativo como Teste JUnit. Se tudo estiver bem com o seu aplicativo, ele produzirá o seguinte resultado -
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 6, Failures: 0
System.html é a saída da execução do teste Concordion.
Clique no link Especificações de serviço da calculadora. Você verá a seguinte saída -