Last active
January 17, 2022 19:48
-
-
Save thiagolenz/47557bf4382aefb97b4535764b3b9d50 to your computer and use it in GitHub Desktop.
Conceitos básicos sobre Mockito
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito.service; | |
import com.exemplo.mockito.dto.TotalizadorComissaoDTO; | |
import com.exemplo.mockito.model.Venda; | |
import com.exemplo.mockito.repository.VendaRepository; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Service; | |
import java.math.BigDecimal; | |
import java.util.List; | |
import java.util.concurrent.atomic.AtomicReference; | |
@Service | |
public class CalculadorComissaoService { | |
@Autowired | |
private VendaRepository vendaRepository; | |
public TotalizadorComissaoDTO calcularTotal(String cpf, Integer periodo) { | |
List<Venda> vendas = vendaRepository.findByCpfAndPeriodo(cpf, periodo); | |
TotalizadorComissaoDTO totalizadorComissaoDTO = new TotalizadorComissaoDTO(); | |
totalizadorComissaoDTO.setValorTotal(getValorComissao(vendas)); | |
return totalizadorComissaoDTO; | |
} | |
private BigDecimal getValorComissao(List<Venda> vendas) { | |
AtomicReference<BigDecimal> totalComissao = new AtomicReference<>(BigDecimal.ZERO); | |
vendas.forEach(nota -> totalComissao.set(totalComissao.get().add(nota.getValorComissao()))); | |
return totalComissao.get(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito; | |
import com.exemplo.mockito.dto.TotalizadorComissaoDTO; | |
import com.exemplo.mockito.model.Venda; | |
import com.exemplo.mockito.repository.VendaRepository; | |
import com.exemplo.mockito.service.CalculadorComissaoService; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.mockito.InjectMocks; | |
import org.mockito.Mock; | |
import org.mockito.junit.MockitoJUnitRunner; | |
import java.math.BigDecimal; | |
import java.util.Arrays; | |
import java.util.List; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertNotNull; | |
import static org.mockito.Mockito.when; | |
@RunWith(MockitoJUnitRunner.class) | |
public class CalculadorComissaoServiceTest { | |
@Mock | |
private VendaRepository vendaRepository; | |
@InjectMocks | |
private CalculadorComissaoService calculadorComissaoService; | |
private String cpf = "12345678900"; | |
private Integer periodo = 201901; | |
@Test | |
public void testCenario1 () { | |
List<Venda> vendas = Arrays.asList( | |
createVenda(15, 150), | |
createVenda(10, 100) | |
); | |
when(vendaRepository | |
.findByCpfAndPeriodo(cpf, periodo)) | |
.thenReturn(vendas); | |
TotalizadorComissaoDTO totalizadorComissaoDTO = calculadorComissaoService.calcularTotal(cpf, periodo); | |
assertNotNull(totalizadorComissaoDTO); | |
assertEquals(BigDecimal.valueOf(25), totalizadorComissaoDTO.getValorTotal()); | |
} | |
@Test | |
public void testCenario2 () { | |
List<Venda> vendas = Arrays.asList( | |
createVenda(15, 150), | |
createVenda(5, 50) | |
); | |
when(vendaRepository | |
.findByCpfAndPeriodo(cpf, periodo)) | |
.thenReturn(vendas); | |
TotalizadorComissaoDTO totalizadorComissaoDTO = calculadorComissaoService.calcularTotal(cpf, periodo); | |
assertNotNull(totalizadorComissaoDTO); | |
assertEquals(BigDecimal.valueOf(20), totalizadorComissaoDTO.getValorTotal()); | |
} | |
private Venda createVenda(long valorComissao, long valorTotal) { | |
Venda venda = new Venda(); | |
venda.setValorComissao(BigDecimal.valueOf(valorComissao)); | |
venda.setValorTotal(BigDecimal.valueOf(valorTotal)); | |
return venda; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito.service; | |
import com.exemplo.mockito.dto.VendaDTO; | |
import com.exemplo.mockito.exception.EmissorVendaException; | |
import com.exemplo.mockito.exception.SistemaERPException; | |
import com.exemplo.mockito.model.Venda; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Service; | |
@Service | |
public class EmissorVendaService { | |
@Autowired | |
private SistemaERPProxyService sistemaERPProxyService; | |
public void emitir (Venda venda) throws EmissorVendaException { | |
VendaDTO vendaDTO = createDTO(venda); | |
try { | |
sistemaERPProxyService.emitir(vendaDTO); | |
} catch (SistemaERPException e) { | |
throw new EmissorVendaException(e); | |
} | |
} | |
private VendaDTO createDTO(Venda venda) { | |
VendaDTO vendaDTO = new VendaDTO(); | |
vendaDTO.setValorImposto(venda.getValorComissao()); | |
vendaDTO.setValorTotal(venda.getValorTotal()); | |
return vendaDTO; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito; | |
import com.exemplo.mockito.dto.VendaDTO; | |
import com.exemplo.mockito.exception.EmissorVendaException; | |
import com.exemplo.mockito.exception.SistemaERPException; | |
import com.exemplo.mockito.model.Venda; | |
import com.exemplo.mockito.service.EmissorVendaService; | |
import com.exemplo.mockito.service.SistemaERPProxyService; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.mockito.ArgumentCaptor; | |
import org.mockito.Captor; | |
import org.mockito.InjectMocks; | |
import org.mockito.Mock; | |
import org.mockito.junit.MockitoJUnitRunner; | |
import java.math.BigDecimal; | |
import static org.junit.Assert.assertEquals; | |
import static org.mockito.Mockito.*; | |
@RunWith(MockitoJUnitRunner.class) | |
public class EmissorVendaServiceTest { | |
@Mock | |
private SistemaERPProxyService sistemaERPProxyService; | |
@InjectMocks | |
private EmissorVendaService emissorVendaService; | |
@Captor | |
private ArgumentCaptor<VendaDTO> captor; | |
@Test | |
public void testEmitir () throws EmissorVendaException, SistemaERPException { | |
Venda venda = createVenda(10, 100); | |
emissorVendaService.emitir(venda); | |
verify(sistemaERPProxyService).emitir(captor.capture()); | |
VendaDTO value = captor.getValue(); | |
assertEquals(venda.getValorComissao(), value.getValorImposto()); | |
assertEquals(venda.getValorTotal(), value.getValorTotal()); | |
} | |
@Test(expected = EmissorVendaException.class) | |
public void testErroEmitirVenda() throws EmissorVendaException, SistemaERPException { | |
Venda venda = createVenda(0, 120); | |
doThrow(new SistemaERPException()) | |
.when(sistemaERPProxyService).emitir(any()); | |
emissorVendaService.emitir(venda); | |
} | |
private Venda createVenda(long valorComissao, long valorTotal) { | |
Venda nota = new Venda(); | |
nota.setValorComissao(BigDecimal.valueOf(valorComissao)); | |
nota.setValorTotal(BigDecimal.valueOf(valorTotal)); | |
return nota; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito.service; | |
import com.exemplo.mockito.model.Pessoa; | |
import com.exemplo.mockito.repository.PessoaRepository; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Service; | |
@Service | |
public class PessoaService { | |
@Autowired | |
private PessoaRepository pessoaRepository; | |
public void save (Pessoa pessoa) { | |
validarCampos(pessoa); | |
pessoaRepository.save(pessoa); | |
} | |
private void validarCampos(Pessoa pessoa) { | |
if (pessoa.getEmail() == null || pessoa.getNome() == null) | |
throw new RuntimeException("Campos obrigatórios..."); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.exemplo.mockito; | |
import com.exemplo.mockito.model.Pessoa; | |
import com.exemplo.mockito.repository.PessoaRepository; | |
import com.exemplo.mockito.service.PessoaService; | |
import org.junit.Test; | |
import org.junit.runner.RunWith; | |
import org.mockito.InjectMocks; | |
import org.mockito.Mock; | |
import org.mockito.junit.MockitoJUnitRunner; | |
import static org.mockito.Mockito.verify; | |
import static org.mockito.Mockito.times; | |
@RunWith(MockitoJUnitRunner.class) | |
public class PessoaServiceTest { | |
@Mock | |
private PessoaRepository pessoaRepository; | |
@InjectMocks | |
private PessoaService pessoaService; | |
@Test | |
public void testSalvarComSucesso () { | |
Pessoa pessoa = new Pessoa(); | |
pessoa.setNome("Teste"); | |
pessoa.setEmail("teste@gmail.com"); | |
pessoaService.save(pessoa); | |
verify(pessoaRepository, times(1)).save(pessoa); | |
} | |
@Test(expected = Exception.class) | |
public void testCamposObrigatoriosInvalidos () { | |
Pessoa pessoa = new Pessoa(); | |
pessoaService.save(pessoa); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment