Skip to content

Instantly share code, notes, and snippets.

@thiagolenz
Last active January 17, 2022 19:48
Show Gist options
  • Save thiagolenz/47557bf4382aefb97b4535764b3b9d50 to your computer and use it in GitHub Desktop.
Save thiagolenz/47557bf4382aefb97b4535764b3b9d50 to your computer and use it in GitHub Desktop.
Conceitos básicos sobre Mockito
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();
}
}
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;
}
}
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;
}
}
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;
}
}
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...");
}
}
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