From bf371b6050aac9977cd389555d0e9b89ae7652b4 Mon Sep 17 00:00:00 2001 From: Manoel Campos Date: Mon, 2 Dec 2024 14:26:54 -0300 Subject: [PATCH] =?UTF-8?q?Remove=20subm=C3=B3dulos=20da=20pasta=20project?= =?UTF-8?q?s=20e=20apenas=20adiciona=20eles=20como=20link?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 + projects/01-introducao-tdd/.gitignore | 1 - projects/01-introducao-tdd/Makefile | 7 -- projects/01-introducao-tdd/README.adoc | 56 --------- projects/01-introducao-tdd/pom.xml | 42 ------- projects/01-introducao-tdd/slides-junit.adoc | 113 ------------------ .../java/com/manoelcampos/tdd/MathUtil.java | 62 ---------- .../com/manoelcampos/tdd/MathUtilMdcTest.java | 61 ---------- .../manoelcampos/tdd/MathUtilPrimoTest.java | 59 --------- projects/02-sistema-bancario | 1 - projects/README.adoc | 5 +- 11 files changed, 7 insertions(+), 404 deletions(-) delete mode 100644 projects/01-introducao-tdd/.gitignore delete mode 100755 projects/01-introducao-tdd/Makefile delete mode 100755 projects/01-introducao-tdd/README.adoc delete mode 100755 projects/01-introducao-tdd/pom.xml delete mode 100755 projects/01-introducao-tdd/slides-junit.adoc delete mode 100755 projects/01-introducao-tdd/src/main/java/com/manoelcampos/tdd/MathUtil.java delete mode 100755 projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilMdcTest.java delete mode 100755 projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilPrimoTest.java delete mode 160000 projects/02-sistema-bancario diff --git a/.gitignore b/.gitignore index 0d69649..2f8e152 100755 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ seu-nome-aqui.zip *.xlsx *telegram*.adoc + +01-introducao-tdd/ +02-sistema-bancario/ +03-vendas-api-spring-test/ diff --git a/projects/01-introducao-tdd/.gitignore b/projects/01-introducao-tdd/.gitignore deleted file mode 100644 index b48d3ac..0000000 --- a/projects/01-introducao-tdd/.gitignore +++ /dev/null @@ -1 +0,0 @@ -unit-test-tools.png diff --git a/projects/01-introducao-tdd/Makefile b/projects/01-introducao-tdd/Makefile deleted file mode 100755 index dd46ba4..0000000 --- a/projects/01-introducao-tdd/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -slides: - @#Compila o README o formato de slides em HTML - asciidoctor-revealjs slides-junit.adoc && echo "Slides HTML gerados com sucesso" - -clean: - @#Apaga os arquivos gerados pelos comandos acima - rm -f slides-junit.html diff --git a/projects/01-introducao-tdd/README.adoc b/projects/01-introducao-tdd/README.adoc deleted file mode 100755 index 064cfe4..0000000 --- a/projects/01-introducao-tdd/README.adoc +++ /dev/null @@ -1,56 +0,0 @@ -:source-highlighter: highlightjs -:numbered: -:unsafe: - -ifdef::env-github[] -:outfilesuffix: .adoc -:caution-caption: :fire: -:important-caption: :exclamation: -:note-caption: :paperclip: -:tip-caption: :bulb: -:warning-caption: :warning: -endif::[] - -= Introdução ao Test Driven Development (TDD) com JUnit image:https://junit.org/junit5/assets/img/junit5-logo.png[width=40px] (link:https://kinolien.github.io/gitzip/?download=/ifto-palmas/testes-de-software/tree/master/projects/01-introducao-tdd[zip]) - - -IMPORTANT: https://www.youtube.com/watch?v=_BP3SLcB0QE&list=PLyo0RUAM69UufupuvTfSM0XffFTvZReet&index=2[Vídeo aula de introdução ao JUnit 5 no NetBeans 11] - -Esta pasta fornece, além de slides sobre TDD, um projeto de exemplo da aplicação de TDD como processo -de desenvolvimento de software, utilizando neste caso o paradigma de -Programação Orientada a Objetos (POO). - -O projeto introduz TDD pelo teste de funções básicas como cálculo do MDC e verificação de números primos. -Os passos para a implementação de um algoritmo para cálculo do MDC foram baseados -nas https://pt.wikipedia.org/wiki/Máximo_divisor_comum#Propriedades[propriedades do MDC indicadas na Wikipedia]. - -== Detalhes do Projeto - -Este não é um projeto Java comum, mas um projeto do tipo Maven [https://pt.wikipedia.org/wiki/Apache_Maven[1], http://maven.apache.org[2]]. - -O projeto disponibilizado aqui utiliza o http://junit.org[JUnit 5] para construção e automação de execução de testes unitários. Como o JUnit é uma dependência externa (que não vem disponível com o JDK), -é extremamente mais fácil criar um projeto Maven, indicar que ele depende do JUnit e deixar o Maven fazer o download de tal dependência. Veja o link:pom.xml[pom.xml] para identificar as configurações realizadas para utilizar o JUnit 5. - -== Estrutura do Projeto - -Um projeto Maven em Java tem a seguinte estrutura de pastas: - -- link:src/main/java[src/main/java]: pasta onde você deve incluir o código fonte do seu projeto, ou seja, classes e interfaces. Este é o código principal do projeto. -- link:src/test/java[src/test/java]: pasta onde você deve incluir os testes para o seu projeto. Nesta pasta você incluirá então classes de testes, ou seja, classes contendo métodos para testar o código o código do projeto. -- target: pasta que será criada quando você compilar o projeto e que pode ser apagada a qualquer momento. - -Assim, podemos ter o código principal do projeto na pasta `src/main/java` e o código de testes em `src/test/java`. -Cada classe de teste deve ser referente a uma classe principal. -Se a classe principal tiver muitos métodos ou a quantidade de testes para cada um -destes métodos for muito grande, podemos criar uma classe de teste contendo -apenas testes para um determinado método da classe sendo testada. - -Para a classe principal como link:src/main/java/com/manoelcampos/tdd/MathUtil.java[MathUtil.java], -poderíamos ter a classe de teste `MathUtilTest.java`. -No entanto, como só os testes do método `mdc` já são muitos, foi criada uma classe de teste link:src/test/java/com/manoelcampos/tdd/MathUtilMdcTest.java[MathUtilMdcTest.java] apenas com os testes deste método. -Esta classe utiliza o JUnit 5 para a construção e automatização da execução dos testes. - -== Slides - -- https://docs.google.com/presentation/d/e/2PACX-1vQzuaBeq1DegSgfUoe1SsFYiPnBaaXNcpm8xr7VuFhP-BtjHwuoE6CZ0mzV1dX0D0k4Y2ekyC2Ya8Gm/pub?start=true&loop=false&delayms=60000[TDD: Como e porque aplicar] -- https://docs.google.com/presentation/d/e/2PACX-1vQWtD6XRRVBhlc6AhQGsMnjpBv7-0In58UEMGlZkxI5PJ0tK1wtUqTt86gVrjg-sT60uGlSl-DrSF-v/pub?start=true&loop=false&delayms=60000[Boas práticas do TDD] diff --git a/projects/01-introducao-tdd/pom.xml b/projects/01-introducao-tdd/pom.xml deleted file mode 100755 index 34e14ed..0000000 --- a/projects/01-introducao-tdd/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - com.manoelcampos - introducao-tdd - 1.0.0 - introducao-tdd - - - UTF-8 - 17 - 17 - - - - - - - maven-surefire-plugin - 3.1.2 - - - - - maven-failsafe-plugin - 3.1.2 - - - - - - - org.junit.jupiter - junit-jupiter - 5.10.0 - test - - - diff --git a/projects/01-introducao-tdd/slides-junit.adoc b/projects/01-introducao-tdd/slides-junit.adoc deleted file mode 100755 index 2327b0f..0000000 --- a/projects/01-introducao-tdd/slides-junit.adoc +++ /dev/null @@ -1,113 +0,0 @@ -:revealjsdir: https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.8.0/ -//:revealjsdir: https://cdnjs.com/libraries/reveal.js/3.8.0 -:revealjs_slideNumber: true -:source-highlighter: highlightjs -:icons: font -:allow-uri-read: -:imagesdir: ../images -:stylesheet: ../../adoc-golo.css -:customcss: ../../slides-base.css -:numbered: -:toc: left -:toc-title: Sumário -:toclevels: 5 - -ifdef::env-github[] -//Exibe ícones para os blocos como NOTE e IMPORTANT no GitHub - -:caution-caption: :fire: -:important-caption: :exclamation: -:note-caption: :paperclip: -:tip-caption: :bulb: -:warning-caption: :warning: -endif::[] - -:chapter-label: -:listing-caption: Listagem -:figure-caption: Figura - -//Transição para todos os slides // none/fade/slide/convex/concave/zoom -//:revealjs_transition: 'zoom' - -//https://github.com/hakimel/reveal.js#theming -:revealjs_theme: league - -= Automação de Testes com JUnit - -image::https://junit.org/junit5/assets/img/junit5-logo.png[width=100px, link=https://junit.org] -https://junit.org - - -Prof. Manoel Campos https://about.me/manoelcampos -Prof. Mauro Henrique - -[transition=zoom] -== Introdução ao JUnit - -[%step] -- Framework para escrita e automação da execução de testes na JVM. -- Possivelmente a ferramenta mais famosa da plataforma Java. -- Fundamental para o Test-Driven Development (TDD). -- Versão 5 reescrita do zero: https://youtu.be/WZ5J4eocHjY - -[transition=fade] -== JUnit 5 :: Estrutura - -[%step] -- Dividido em 3 módulos específicos -- Mais fácil para o projeto evoluir -- O desenvolvedor usa somente o que precisa, reduzindo o tamanho do download - -[transition=fade] -== JUnit 5 :: Algumas Melhorias - -[%step] -- Facilita o uso e resolve coisas irritantes para quem vem do JUnit 4 -- Mensagem de erro opcional para a falha de um teste é o último parâmetro -- Classes de teste e testes não precisam ser públicos - -[transition=fade] -== JUnit 5 :: Algumas Melhorias - -[%step] -- Testes Parametrizados -- Permite utilizar Expressões Lambda (http://github.com/manoelcampos/programacao-funcional-java[Programação Funcional no Java]) -- Principais recursos nos seguintes links: https://developer.ibm.com/tutorials/j-introducing-junit5-part1-jupiter-api/[<1>] https://stackify.com/junit-5/[<2>] - -[transition=fade] -== JUnit 5 :: Módulos - -[%step] -- *JUnit Platform*: base para desenvolvimento e execução de frameworks de teste na JVM. -- *JUnit Jupiter*: para escrita de testes e extensões -- *JUnit Vintage*: executar testes do JUnit 3 e 4 no JUnit 5 - -[transition=fade] -== JUnit 5 :: Utilização - JDK - -- JDK 8 ou superior - -[transition=fade] -== JUnit 5 :: Utilização - IDEs - -[%step] -- NetBeans image:netbeans.png[width=50px] -- IntelliJ image:intellij.png[width=50px] -- Eclipse image:eclipse.png[width=50px] -- E editor Visual Studio Code (com plugin) image:vscode.png[width=50px] - -[transition=fade] -== JUnit 5 :: Utilização - Ferramentas de automação de Build - -[%step] -- Maven -- Gradle -- Outras - -[transition=fade] -== ! - -image::typing.gif[background] - -// Imagem: tenor.com - diff --git a/projects/01-introducao-tdd/src/main/java/com/manoelcampos/tdd/MathUtil.java b/projects/01-introducao-tdd/src/main/java/com/manoelcampos/tdd/MathUtil.java deleted file mode 100755 index f93302d..0000000 --- a/projects/01-introducao-tdd/src/main/java/com/manoelcampos/tdd/MathUtil.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.manoelcampos.tdd; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * Inclui métodos estáticos para fazer cálculos de propósito geral, - * como o MDC. - * - *

A implementação do cálculo do MDC seguiu as - * propriedades matemáticas - * de tal método e o processo de Test Driven Development (TDD). - * Veja a classe MathUtilMdcTest.

- * - * @author Manoel Campos da Silva Filho - */ -public class MathUtil { - /** - * Construtor privado para evitar que a classe seja instanciada. - * Uma vez que ela só possui métodos estáticos e não - * tem atributos, é totalmente desnecessário criar instâncias dela. - */ - private MathUtil(){} - - /** - * Calcula o MDC de dois números. - * @param a 1º valor pra calcular o MDC - * @param b 2º valor pra calcular o MDC - * @return o MDC calculado - * - * @see Propriedades MDC - */ - public static int mdc(int a, int b){ - return -1; - } - - /** - * Verifica se um número é primo. - * Um primo é um número natual maior que 1, que não pode ser formado pela multiplicação - * de dois números naturais menores. - * - * @param numero número a ser testado. - * @return true se o número for primo, false caso contrário - * - * @see Número Primo - * @see Prime Number - */ - public static boolean isPrimo(final long numero){ - if(numero <= 1){ - return false; - } - - for(long i = 2; i < numero; i++){ - if(numero%i==0){ - return false; - } - } - - return true; - } -} diff --git a/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilMdcTest.java b/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilMdcTest.java deleted file mode 100755 index 373f0e4..0000000 --- a/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilMdcTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.manoelcampos.tdd; - -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.ValueSource; - -import static com.manoelcampos.tdd.MathUtil.mdc; -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Classe para inclusão dos testes unitários para - * os métodos mdc() da classe {@link MathUtil}, - * que calcula o Máximo Divisor Comum de dois ou mais números. - * - *

Cada teste unitário deve verificar uma determinada propriedade - * do MDC. Os métodos de teste indicam o número da - * propriedade< - * testada (como p1) no nome.

- * - * @author Manoel Campos da Silva Filho - */ -class MathUtilMdcTest { - - /** - * Teste parametrizado para a propriedade 1 da função {@link MathUtil#mdc(int, int)}. - * Assim, o teste é executado múltiplas vezes com valores diferentes. - * Os valores para os parâmetros do teste são obtidos a partir da anotação {@link CsvSource}, - * onde cada String representa um conjunto de valores que serão passadas para o teste. - * Múltiplas String indica que o teste será chamado várias vezes com diferentes valores. - * Os valores em cada String devem ser separados por vírgula (formato CSV (Comma Separated Values)). - * Assim, se tiver 3 parâmetros no teste, cada String deve ter 3 valores separados por vírgula. - * - * @param a valor para o 1o parâmetro da função mdc. - * @param b valor para o 2o parâmetro da função mdc - * @param esperado valor esperado como resultado da chamada da função mdc. - */ - @ParameterizedTest - @CsvSource({"6, 3, 3", "6, 6, 6", "8, 2, 4"}) - void mdcP1Divisiveis(final int a, final int b, final int esperado){ - final int obtido = mdc(a, b); - assertEquals(esperado, obtido); - } - - /** - * Teste parametrizado para a propriedade 3 da função {@link MathUtil#mdc(int, int)}. - * Assim, o teste é executado múltiplas vezes com valores diferentes. - * Usa apenas valores positivos para o parâmetro a da função. - * @param a valor para o 1o parâmetro da função mdc. - * Tal valor é obtido a partir da anotação {@link ValueSource}. - * Ela é usada para chamar o teste múltiplas vezes passando em cada vez - * um valor para um único parâmetro do método. - */ - @ParameterizedTest - @ValueSource(ints = {8, 7, 2, 0, 3, 15, 30, 21}) - void mdcP3APositivoBZero(final int a){ - final int b = 0, esperado = a; - final int obtido = mdc(a, b); - assertEquals(esperado, obtido); - } - -} diff --git a/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilPrimoTest.java b/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilPrimoTest.java deleted file mode 100755 index 83a779c..0000000 --- a/projects/01-introducao-tdd/src/test/java/com/manoelcampos/tdd/MathUtilPrimoTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.manoelcampos.tdd; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - -/** - * Realiza vários testes unitários para - * o método isPrimo() da classe {@link MathUtil}, - * que verifica se um número é primo ou não. - * - * @author Manoel Campos da Silva Filho - */ -class MathUtilPrimoTest { - - @Test - void isPrimo0() { - assertFalse(MathUtil.isPrimo(0)); - } - - @Test - void isPrimo1() { - assertFalse(MathUtil.isPrimo(1)); - } - - @Test - void isPrimo2() { - assertTrue(MathUtil.isPrimo(2)); - } - - @Test - void isPrimo3() { - assertTrue(MathUtil.isPrimo(3)); - } - - @Test - void isPrimo4() { - assertFalse(MathUtil.isPrimo(4)); - } - - @Test - void isPrimo5() { - assertTrue(MathUtil.isPrimo(5)); - } - - @Test - void isPrimo6() { - assertFalse(MathUtil.isPrimo(6)); - } - - @Test - void isPrimo13() { - assertTrue(MathUtil.isPrimo(13)); - } - - @Test - void isPrimoMaxInt() { - assertTrue(MathUtil.isPrimo(Integer.MAX_VALUE)); - } -} \ No newline at end of file diff --git a/projects/02-sistema-bancario b/projects/02-sistema-bancario deleted file mode 160000 index 81b1f90..0000000 --- a/projects/02-sistema-bancario +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 81b1f90b5b4c14f887c5bb51f9d09622ed4e2439 diff --git a/projects/README.adoc b/projects/README.adoc index ec691aa..73b3839 100644 --- a/projects/README.adoc +++ b/projects/README.adoc @@ -15,5 +15,6 @@ endif::[] Disponibiliza projetos Java para prática do Test-Driven Development (TDD): -- link:01-introducao-tdd[Introdução ao TDD]: projeto inicial com problemas simples para entender o funcionamento do TDD e JUnit 5 -- https://github.com/manoelcampos/sistema-bancario[Sistema Bancário]: projeto mais realista com regras de negócio a serem implementadas por meio do TDD com JUnit 5 +- https://github.com/manoelcampos/introducao-tdd-java[Introdução ao TDD]: projeto inicial com problemas simples para entender o funcionamento do TDD e JUnit 5. +- https://github.com/manoelcampos/sistema-bancario[Sistema Bancário]: projeto mais realista com regras de negócio a serem implementadas por meio do TDD com JUnit 5. +- https://github.com/manoelcampos/vendas-api-spring-test[Vendas REST API]: projeto de exemplo para criar testes com Spring Test.