Manual básico do JUnit

Alguns anos atrás comecei a estudar TDD e como desenvolvia principalmente em Java na época comecei a aprender um pouco mais sobre o JUnit, o principal framework de testes de unidade do Java e um dos primeiros de todas as linguagens. Para me ajudar eu criei um pequeno manual prático sobre ele: class SimpleSnipetJUnitTest { private Calculator calculator; /** * Este método é invocado antes de cada teste, a annotation * facilita isso */ @Before public void setUp() { //Tudo aqui será executado antes, servindo por exemplo para inicializar. calculator = new Calculator(); } /** * Este método é invocado após os testes, servindo, como exemplo, para liberar recursos. */ @After public void finalize() { } /** * Teste comum, o método assertEquals realiza a operação de teste de igualdade. */ @Test public void testeSimples() { int result; result = calculator.sum(1, 2); assertEquals(3, result); } /** * Teste para números de ponto flutuante. * Destaque para o terceiro parâmetro, o delta, que define * qual a diferença decimal entre cada parâmetro. */ @Test public void testeDePontoFlutuante() { float result; result = calculator.divide(5, 2); //O terceiro parâmetro é a diferença máxima entre os floats assertEquals(2.5, result, 0.1) } /** * Teste para exceções * Se não disparar a exceção, o método falha. */ @Test (expected= CalculatorException.class) public void testeDeExcecao() { int result; result = calculator.divide(5, 0); } }

14 de outubro de 2021 · 2 min de leitura · Lucas Polo

O novo (mas nem tanto) switch/case do Java

Recentemente voltei a mexer mais com Java devido ao trabalho e também alguns conteúdos que eu estava acompanhando que utilizam a linguagem. Como estou utilizando o IntelliJ como IDE ela sugeriu algo muito interessante e que passei adotar sempre que posso, o nova sintaxe do switch/case. A instrução switch case comum do Java segue algo muito similar a já implementada no C, um exemplo simples: package com.company; public class Main { public static void main(String[] args) { var nome = "Cebolinha"; switch(nome) { case "Lucas": System.out.println("Bem vindo programador Lucas"); break; case "Grace": System.out.println("Bem vinda programadora Grace Hopper"); break; default: System.out.println("Bem vindx pessoa programadora " + nome); } } } Esta é a estrutura comum que já conhecemos, como você pode ver temos os casos específicos que tratamos, o caso padrão e para que a avaliação do switch/case pare precisamos utilizar a clausula break, o que chega a me dar “gastura” em switch/cases muito grandes. ...

27 de setembro de 2021 · 4 min de leitura · Lucas Polo

Resenha do Livro: Fundamentos de Algoritmos para Jogos Digitais de David Santos

Recentemente eu estava em uma empreitada para aprender um pouco mais sobre desenvolvimento de jogos e comecei a procurar alguns materiais na internet. Hoje em dia boa parte desses materiais são voltados para os grandes frameworks de desenvolvimento de jogos, como o Unit, o que é muito interessante, pois além de facilitarem fazer coisas complexas também já se encaixam com os requisitos do mercado que adotam em massa estes frameworks. Porém eu não estava necessariamente querendo aprender a fazer coisas complexas, mas aprender as bases do desenvolvimento de jogos e tive uma grata surpresa ao descobrir o livro Fundamentos de algoritmos para jogos digitais do David V. Santiago (versão Java). ...

14 de junho de 2021 · 3 min de leitura · Lucas Polo

Nashorn: Javascript sobre a JVM

Programar em Java está cada vez mais rápido e simples, desde as mudanças que começaram a surgir na versão 7 do Java, a verbosidade característica da linguagem foi reduzindo e agora no Java 8 alcançamos um nível muito superior com a programação funcional presente na linguagem. Porém, muitos ainda dizem que estas funcionalidades chegaram um pouco atrasadas na linguagem, e durante este tempo que ainda não tinhamos a programação funcional presente no Java, foram surgindo outras linguagens sobre a JVM que visavam trazer novos paradigmas para os programadores. ...

22 de agosto de 2017 · 2 min de leitura · Lucas Polo

Iterando sobre uma matriz com um único loop

Quando estamos nas aulas iniciais de programação, aprendemos a iterar sobre vetores e matrizes, sendo que no segundo caso é necessário criar um loop (for, while e etc) para cada dimensão de nossa matriz. Desta forma criamos muitas vezes um código com vários níveis de aninhamento no nosso código. Uma outra forma de lidar com isto é criando uma forma de a partir de um único índice extrair o valores dos sub-índices, uma tarefa simples se utilizarmos módulo. ...

16 de julho de 2016 · 2 min de leitura · Lucas Polo

Encurtando links em Java usando o Migre.me

Uma pequena forma de como usar o Migre.me dentro de sua aplicação para encurtar URLs. A requisição é feita utilizando alguns componentes da especificação JAX-RS, utilizando o Jersey como implementação. Para fazer parser do JSON recebido, utilizamos o Jackson, o que deixa as coisas muito simples. package br.com.lucaspolo.json.teste; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; import java.util.Map; import javax.naming.LimitExceededException; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Link; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; /** * @author lucaspolo * Classe de teste que faz a requisição do migre.me, encurta a URL e converte em um Hash. * A dica do parser para Map foi retirada de * {@link http://www.mkyong.com/java/how-to-convert-java-map-to-from-json-jackson/} * O POM com as dependencias do Maven para rodar este exemplo é este * {@link https://gist.github.com/lucaspolo/7a2a0ea33f3ce0c93975} */ public class App { public static void main( String[] args ) throws Exception { URI uri = new URI("http://migre.me/api.json?"); Client client = ClientBuilder.newClient(); WebTarget target = client.target(uri.toURL().toString()) .queryParam("url", "http://www.ocaminhodoprogramador.com.br"); String conteudo = target.request().get(String.class); System.out.println(conteudo); Map<String, String> map = new HashMap<>(); ObjectMapper mapper = new ObjectMapper(); map = mapper.readValue(conteudo, new TypeReference<HashMap<String, String>>() {}); System.out.println(map.get("migre")); } }

18 de maio de 2014 · 1 min de leitura · Lucas Polo

Dando um close no Java 7: AutoCloseable

Gerenciar recursos sempre foi algo muito chato, principalmente quando parte do ciclo de vida do objeto é fecha-lo, senão você poderá ter problemas na execução do seu programa. Vamos por exemplo analisar um código que abre um arquivo e itera sobre ele exibindo seu conteúdo linha a linha: FileReader readerAntigo = null; try { readerAntigo = new FileReader("arquivo.txt"); Scanner scanner = new Scanner(readerAntigo); while(scanner.hasNext()) { System.out.println(scanner.next()); } } catch (FileNotFoundException e ) { System.out.println("Arquivo não encontrado"); } finally { try { readerAntigo.close(); } catch (IOException e) { System.out.println("Erro ao fechar o arquivo"); } } Perceba como é chato gerenciar o arquivo, para que eu possa abrir e fechar são necessário duas capturas de sessão, sem contar que ainda é necessário que o programador lembre-se de fechar o arquivo, algo que não pode ser tão crítico, mas se imaginarmos conexões JDBC, logo o banco começará a recusar conexões pois esquecemos de fecha-las anteriormente. ...

16 de março de 2014 · 2 min de leitura · Lucas Polo

Mapeando e Reduzindo - Java 8

As vezes precisamos processar dados em um volume maior, onde é necessário filtrar a informação, selecionar ou alterar o que queremos para depois realizar o processamento. Como exemplo, vamos imaginar uma lista de alunos, onde cada instância tem seu nome e nota. Desta lista queremos a média geral, a média dos alunos aprovados (ou seja, quem tirou nota seis ou mais) e a média dos reprovados (nota menor que seis). Para isso, vamos primeiro visualizar nossa lista: ...

6 de março de 2014 · 5 min de leitura · Lucas Polo

Filtrando resultados (Predicados) - Java 8

Muitas vezes precisamos filtrar listas, listas de todos os tipos, desde números básicos, passando por Strings, até tipos complexos. Abaixo temos um exemplo simples disto, onde temos uma lista com alguns nomes e queremos filtra-la e exibi-la para o usuário (no caso, todos os nomes que tiverem a letra “u” serão exibidos): List<String> nomes = new ArrayList<>(); nomes.add("João da Silva"); nomes.add("Joaquim da Padaria"); nomes.add("Lucas Polo"); nomes.add("Chaves"); List<String> nomesFiltrados = new ArrayList<>(); System.out.println("Iniciando filtragem"); for (String nome : nomes) { System.out.println("Avaliando: " + nome); if (nome.contains("u")) nomesFiltrados.add(nome); } System.out.println("Iniciando impressão"); for (String nome : nomesFiltrados) { System.out.println(nome); } A saida é: Iniciando filtragem Avaliando: João da Silva Avaliando: Joaquim da Padaria Avaliando: Lucas Polo Avaliando: Chaves Iniciando impressão Joaquim da Padaria Lucas Polo Repare que primeiros os resultados são filtrados e depois exibidos, mas variando com o tamanho da lista, pode demorar muito tempo para filtrarmos uma lista inteira, e por isso, muitas vezes, é melhor avaliar se o elemento passa no filtro e trata-lo devidamente, ganhando assim mais velocidade. Na programação funcional, temos um meio de lidar com isso, chamado avaliação preguiçosa. ...

2 de março de 2014 · 3 min de leitura · Lucas Polo

Inversão de Controle e Injeção de Dependências

Quando comecei a programar na escola (curso técnico que fiz na época), comecei em uma das linguagens mais legais e, de certo modo, estranha que existe, a linguagem C. Alguns conceitos dela não são claros logo de inicio, pois não fazem nenhum paralelo com o mundo real. Um deles é o conceito de ponteiros e alocação de memória, onde você dinamicamente pode alocar memória para seu programa utilizar. Porém, como dizia o Tio Ben: “Grandes poderes trazem grandes responsabilidades”, logo você se via obrigado a “lembrar” de liberar toda a memória alocada quando não fizesse mais uso dela, senão seu programa logo travaria junto com o seu sistema operacional. ...

23 de setembro de 2013 · 5 min de leitura · Lucas Polo