Nome: Luís Augusto Simas do Nascimento
RA: 790828
O primeiro exercício consiste na resolução do exercício 12 da primeira lista e na elaboração de um grafo de fluxo de controle.
O fluxo de controle é listado a seguir:
1 -> 2
1 -> 3
2 -> 3
2 -> 4
2 -> 5
4 -> 5
4 -> 6
6 -> 7
6 -> 8
6 -> 9
9 -> 10
9 -> 11
10 -> 11
6 -> 12
Os casos de teste para atingir 100% de cobertura de branches é implementado a seguir:
package s04;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
class VerificadorEleitoralTest {
CartorioEleitoral catorioEleitoralMock;
@BeforeEach
void setUp() {
this.catorioEleitoralMock = mock(CartorioEleitoral.class);
}
@Test
void consultarSituacaoIdadePequena() {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
assertThrows(Exception.class,() -> {
ver.consultarSituacao(-1, "11122233344");
});
}
@Test
void consultarSituacaoIdadeGrande() {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
assertThrows(Exception.class,() -> {
ver.consultarSituacao(201, "11122233344");
});
}
@Test
void consultarSituacaoCpfNulo() {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
assertThrows(Exception.class,() -> {
ver.consultarSituacao(20, null);
});
}
@Test
void consultarSituacaoCpfInvalido() {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
assertThrows(Exception.class,() -> {
ver.consultarSituacao(20, "any-string");
});
}
@Test
void consultarSituacaoMenorDe16Anos() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
String result = ver.consultarSituacao(15, "11122233344");
assertEquals(result, "nao pode votar");
}
@Test
void consultarSituacaoCpfNaoExiste() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("nao existe");
String result = ver.consultarSituacao(20, "11122233344");
assertEquals(result, "faca um titulo");
}
@Test
void consultarSituacaoCpfComPendencia() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("pendencia");
String result = ver.consultarSituacao(20, "11122233344");
assertEquals(result, "regularize seu titulo");
}
@Test
void consultarSituacaoCpfOkMaiorDeIdade() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("OK");
String result = ver.consultarSituacao(20, "11122233344");
assertEquals(result, "voto obrigatorio");
}
@Test
void consultarSituacaoCpfOkMenorDeIdade() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("OK");
String result = ver.consultarSituacao(17, "11122233344");
assertEquals(result, "voto facultativo");
}
@Test
void consultarSituacaoCpfOkIdoso() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("OK");
String result = ver.consultarSituacao(80, "11122233344");
assertEquals(result, "voto facultativo");
}
@Test
void consultarSituacaoStatusCpfDesconhecido() throws Exception {
VerificadorEleitoral ver = new VerificadorEleitoral(this.catorioEleitoralMock);
when(this.catorioEleitoralMock.verificar(anyString())).thenReturn("any-status");
String result = ver.consultarSituacao(20, "11122233344");
assertEquals(result, "erro desconhecido");
}
}
O exercício 2 consiste em solucionar o exercício 1 da lista de testes de mutação. Com os testes a seguir é possível matar os mutantes 1 e 2. Entretanto, o mutante 3 é equivalente, pois a alteração no valor inicial de i
não tem efeito nesse caso, pois a variável maior
já é inicializada como o primeiro elemento do vetor.
package s04;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class OriginalTest {
@Test
// Mata o primeiro mutante
void getMaiorUltimoElemento() {
Original original = new Original();
int[] vetor = {1,22,3,32};
int result = original.getMaior(vetor);
assertEquals(result, 32);
}
@Test
// Mata o segundo mutante
void getMaiorSegundoElemento() {
Original original = new Original();
int[] vetor = {2,420,8,3};
int result = original.getMaior(vetor);
assertEquals(result, 420);
}
}