serem mantidos. Pois caso isso aconteca a equipe pode ficar desmotivada para realizar os testes.Imagine que estamos desenvolvendo um sistema para uma loja de venda de computadores. Este sistema deve sugerir computadores que possam agradar determinado cliente.Um possivel modelo para este dominio pode ser visto no diagrama (diagrama informal, ok?!) abaixo:Nosso computador possui apenas duas portas USB, uma dianteira e outra traseira, cor, possui varios componentes e tambem informa se e de marca famosa, pois possuimos clientes que compram apenas produtos de primeira linha.Cada componente possui nome, descricao e cor.Cor por sua vez possui um nome e valores correspondente a tabela de cores RGB (red, green, blue).Vamos ao codigo do dominio:public class Computador { private USB usbDianteira; private USB usbTraseira; private Collection< Componente > componentes; private boolean marcaFamosa; public Computador(USB usbDianteira, USB usbTraseira, Collection< Componente > componentes, boolean marcaFamosa) { this.usbDianteira = usbDianteira; this.usbTraseira = usbTraseira; this.componentes = componentes; this.marcaFamosa = marcaFamosa; } // getters e setters necessarios}public class USB { private String versao; public USB(String versao) { this.versao = versao; } // getters e setters necessarios}public class Componente { private String nome; private String descricao; private Cor cor; public USB(String nome, String descricao, Cor cor) { this.nome = nome; this.descricao = descricao; this.cor = cor; } // getters e setters necessarios}public class Cor { private String nome; private int r; private int g; private int b; public USB(String nome, int r, int g, int b) { this.nome = nome; this.r = r; this.g = g; this.b = b; } // getters e setters necessarios}Agora que temos nosso modelo pronto, iremos testar a classe que verifica se devemos sugerir determinado computador ao cliente ou nao. Esta classe recebe o Cliente no construtor e podemos chamar o metodo deveSugerir, que recebe um computador e retorna um boolean.public class Aconselhador { private Cliente client; public Aconselhador(Cliente cliente) { this.cliente = cliente; } public boolean deveReceberComoSugestao(Computador computador) { // faz uma logica baseada no cliente no computador a ser sugerido }}Vamos testar nossa classe, para fins didaticos vamos testar apenas um caso da classe, porem em seu codigo, voce deve testar TODAS as possibilidades. (Veja o post anterior para aprender como visualizar a cobertura de testes em seu codigo).@Testpublic void deveSugrirComputadorDeMarcaEComMuitosComponentesParaClienteExigente() { Cliente cliente = new Cliente("Renan"); USB usbDianteira = new USB("2.0"); USB usbTraseira = new USB("1.0"); Cor corDoMonitor = new Cor("preto", 0, 0, 0); Componente monitor = new Componente("nome do monitor", "descricao monitor", corDoMonitor); Cor corDoMouse = new Cor("preto", 0, 0, 0); Componente mouse = new Componente("descricao do mouse", "nome mouse", corDoMouse); Cor corDoTeclado = new Cor("branco", 100, 100, 100); Componente teclado = new Componente("nome do teclado", "descricao teclado", corDoMonitor); Cor corDaWebCam = new Cor("cinza", 140, 120, 110); Componente webCam = new Componente("nome da webcam", "descricao webcam", corDaWebCam); List< Componente > componentes = new ArrayList<>(); componentes.add(monitor); componentes.add(teclado); componentes.add(webCam); Computador computador = new Computador(usbTraseira, usbDianteira, componentes, true); assertTrue(new Aconselhador(cliente).deveReceberComoSugestao(computador));}Vamos analisar o codigo e fazer algumas consideracoes. A primeira coisa a notar e que quanto mais Componentes nosso Computador possuir, mais poluido fica nosso codigo. Tambem sem uma explicacao previa, fica dificil saber oque e o