Skip to content

Commit

Permalink
Projeto base para testes integrados
Browse files Browse the repository at this point in the history
  • Loading branch information
diegoquirino committed Jun 26, 2018
1 parent 19c51b6 commit f7f7b94
Show file tree
Hide file tree
Showing 13 changed files with 305 additions and 58 deletions.
8 changes: 8 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
</properties>

<dependencies>
<!-- Dependências do JUNIT 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
Expand All @@ -28,6 +29,13 @@
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- Dependências do EASYMOCK -->
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>3.6</version>
<scope>test</scope>
</dependency>
<!-- Dependências para trabalhar com Suítes de Testes -->
<dependency>
<groupId>org.junit.platform</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package br.pro.diegoquirino.calculadora.model;

import br.pro.diegoquirino.calculadora.util.DescontoUtils;

import java.util.HashMap;
import java.util.Map;


public class CarrinhoDeCompras {

private Map<Produto, Integer> produtos;

private Cliente cliente;

public CarrinhoDeCompras() {
super();
this.produtos = new HashMap<>();
}

public Map<Produto, Integer> getProdutos() {
return produtos;
}

public void setProdutos(Map<Produto, Integer> produtos) {
this.produtos = produtos;
}

public Cliente getCliente() {
return cliente;
}

public void setCliente(Cliente cliente) {
this.cliente = cliente;
}

public void addProduto(Produto p, int quant) {
if(!this.produtos.containsKey(p)) {
this.produtos.put(p, quant);
}
}

public double calcularValorComDesconto(Produto p) {
DescontoUtils du = new DescontoUtils();
double valorComDesconto = 0;
for(Produto prod: this.produtos.keySet()) {
if(p.equals(prod)) {
valorComDesconto = prod.getValor() *
du.calcularFatorDeDesconto(this.cliente.getTipoCliente(),
produtos.get(prod).intValue());
}
}
return valorComDesconto;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package br.pro.diegoquirino.calculadora.model;

public interface Cliente {

public String getTipoCliente();

public void setTipoCliente(String tipo);

}
13 changes: 13 additions & 0 deletions src/main/java/br/pro/diegoquirino/calculadora/model/Produto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package br.pro.diegoquirino.calculadora.model;

public interface Produto {

public double getValor();

public void setValor(double valor);

public double getQuantEmEstoque();

public void setQuantEmEstoque(int quant);

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,30 @@ public double calcularFatorDeDesconto(String tipoCliente, int quant) {
double desc = 0;
switch(tipoCliente) {
case "A":
if(quant < 10) {
desc = 1.00;
} else if (quant >= 10 && quant < 100) {
if(quant < 100) {
desc = 0.90;
} else if (quant >= 100 && quant < 1000) {
desc = 0.95;
} else {
desc = 0.90;
desc = 1.00;
}
break;
case "B":
if(quant < 10) {
desc = 0.95;
} else if (quant >= 10 && quant < 100) {
if(quant < 100) {
desc = 0.85;
} else if (quant >= 100 && quant < 1000) {
desc = 0.90;
} else {
desc = 0.75;
desc = 0.95;
}
break;
case "C":
if(quant < 10) {
desc = 1.00;
} else if (quant >= 10 && quant < 100) {
if(quant < 100) {
desc = 0.80;
} else if (quant >= 100 && quant < 1000) {
desc = 0.85;
} else {
desc = 0.75;
desc = 0.90;
}
break;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package br.pro.diegoquirino.calculadora.model;

import org.easymock.EasyMock;
import org.easymock.EasyMockSupport;
import org.easymock.Mock;
import org.easymock.TestSubject;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import static org.junit.jupiter.api.Assertions.assertEquals;

@ExtendWith(EasyMockExtension.class)
public class CarrinhoDeComprasTests extends EasyMockSupport{

// 1. Criar os Mocks
@Mock
private Produto produto;
@Mock
private Cliente cliente;

@TestSubject // 2. Escolher a classe que sera testada (alvo do teste)
private final CarrinhoDeCompras driver = new CarrinhoDeCompras();

@Test
@DisplayName("Calcular o VALOR DO PRODUTO após aplicado o fator de desconto para o Cliente A, menor que 100 unidades")
@Tag("ClienteA")
public void testCalcularValorComDescontoDoProduto_QuandoClienteAMenor100() {
// 3. Configurar o estado inicial dos objetos
EasyMock.expect(this.cliente.getTipoCliente()).andReturn("A");
EasyMock.expect(this.produto.getValor()).andReturn(1000.00);
// 4. Gravar os estados atuais dos objetos
replayAll();

// 5. Testar
this.driver.setCliente(this.cliente);
this.driver.addProduto(this.produto, 99);
double valorComDesconto = this.driver.calcularValorComDesconto(this.produto);
assertEquals(900.00, valorComDesconto);
// 6. Verificar que tudo o que era necess�rio para testar foi chamado
verifyAll();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package br.pro.diegoquirino.calculadora.model;

import org.easymock.EasyMockSupport;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestInstancePostProcessor;

public class EasyMockExtension implements TestInstancePostProcessor {

@Override
public void postProcessTestInstance(Object testInstance, ExtensionContext context) throws Exception {
EasyMockSupport.injectMocks(testInstance);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package br.pro.diegoquirino.calculadora.util;

import br.pro.diegoquirino.calculadora.model.Cliente;

public class ClienteAStub implements Cliente {

@Override
public String getTipoCliente() {
return "A";
}

@Override
public void setTipoCliente(String tipo) {
;
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package br.pro.diegoquirino.calculadora.util;

import br.pro.diegoquirino.calculadora.model.Cliente;
import org.junit.jupiter.api.*;

import static org.junit.jupiter.api.Assertions.*;

public class DescontoUtilsTests {

private DescontoUtils driver;
private Cliente cli;

@BeforeEach
void setUp() {
this.driver = new DescontoUtils();
this.cli = new ClienteAStub();
}

@AfterEach
void tearDown() {
this.driver = null;
this.cli = null;
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente A, menor que 100 unidades")
@Tag("ClienteA")
void testCalcularFatorDeDescontoClienteAMenor100() {
double fator = this.driver.calcularFatorDeDesconto(this.cli.getTipoCliente(),99);
assertEquals(0.90, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente A, maior ou igual a 100 e menor que 1000 unidades")
@Tag("ClienteA")
void testCalcularFatorDeDescontoClienteAEntre100e1000() {
double fator = this.driver.calcularFatorDeDesconto(this.cli.getTipoCliente(),100);
assertEquals(0.95, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente A, maior ou igual 1000 unidades")
@Tag("ClienteA")
void testCalcularFatorDeDescontoClienteAMaior1000() {
double fator = this.driver.calcularFatorDeDesconto(this.cli.getTipoCliente(),1000);
assertEquals(1.00, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente B, menor que 100 unidades")
@Tag("ClienteB")
void testCalcularFatorDeDescontoClienteBMenor100() {
double fator = this.driver.calcularFatorDeDesconto("B",99);
assertEquals(0.85, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente B, maior ou igual a 100 e menor que 1000 unidades")
@Tag("ClienteB")
void testCalcularFatorDeDescontoClienteBEntre100e1000() {
double fator = this.driver.calcularFatorDeDesconto("B",100);
assertEquals(0.90, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente B, maior ou igual 1000 unidades")
@Tag("ClienteB")
void testCalcularFatorDeDescontoClienteBMaior1000() {
double fator = this.driver.calcularFatorDeDesconto("B",1000);
assertEquals(0.95, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente C, menor que 100 unidades")
@Tag("ClienteC")
void testCalcularFatorDeDescontoClienteCMenor100() {
double fator = this.driver.calcularFatorDeDesconto("C",99);
assertEquals(0.80, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente C, maior ou igual a 100 e menor que 1000 unidades")
@Tag("ClienteC")
void testCalcularFatorDeDescontoClienteCEntre100e1000() {
double fator = this.driver.calcularFatorDeDesconto("C",100);
assertEquals(0.85, fator);
}

@Test
@DisplayName("Calcular o fator de desconto para o Cliente C, maior ou igual 1000 unidades")
@Tag("ClienteC")
void testCalcularFatorDeDescontoClienteCMaior1000() {
double fator = this.driver.calcularFatorDeDesconto("C",1000);
assertEquals(0.90, fator);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.SuiteDisplayName;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(JUnitPlatform.class)
@SuiteDisplayName("Suíte de testes para os clientes do tipo A")
@SelectPackages({"br.pro.diegoquirino.calculadora"})
@IncludeTags("ClienteA")
@ExcludeTags({"ClienteB","ClienteC"})
public class SuiteTipoClienteA {

}
Loading

0 comments on commit f7f7b94

Please sign in to comment.