Kotlinautas
Esse conteúdo é oferecido e distribuído pela comunidade Kotlinautas, uma comunidade brasileira que busca oferecer conteúdo gratuito sobre a linguagem Kotlin em um espaço plural.
Teste Unitário
Teste unitário é um tipo de teste onde cada componente do software pode ser testado separadamente. Com isso, cada parte do sistema será isolada, dando a garantia que está funcionando como o esperado.
Kotest
Kotest é uma biblioteca em Kotlin para a criação de testes unitários. Kotest pode ser usado com diferentes estilos de teste, permitindo uma grandle flexibilidade.
Materiais
Será necessário ter o IntelliJ instalado na máquina e um conhecimento básico sobre a linguagem Kotlin.
O quê vamos criar?
Vamos criar uma classe Calculadora
, que terá quatro funções, sendo Soma
, Subtração
, Multiplicação
e Divisão
. Cada uma dessas funções representa uma operação matemática.
Iremos criar um teste unitário para essa classe, testando cada operação separadamente usando a Kotest.
Criando o projeto
Abra seu IntelliJ no menu inicial e clique em New Project:
Depois, selecione a opção Kotlin DSL build script, selecione também a opção Kotlin/JVM, e opicionalmente remova a primeira opção Java. Essa opção não vai mudar em nada, pois ela dá suporte do Gradle á linguagem Java, mas apenas iremos usar Kotlin.
Após isso, clique em Next e escreva o nome do projeto e a localização na sua máquina. Essas duas opção são completamente pessoais, caso não tenha nenhuma ideia, coloque algo como kotest apenas como identificação.
Agora, com o projeto aberto, vá ao aquivo build.gradle.kts
e adicione a dependência testImplementation("io.kotlintest:kotlintest-runner-junit5:3.1.7")
, com a seção dependencies
ficando assim:
dependencies { implementation(kotlin("stdlib")) testImplementation("io.kotlintest:kotlintest-runner-junit5:3.1.7") }
Também adicione uma modificação ás Tasks do Gradle:
tasks.withType<Test> { useJUnitPlatform() }
Ao final, nosso arquivo build.gradle.kts
ficará assim:
plugins { java kotlin("jvm") version "1.5.30" } group = "org.example" version = "1.0-SNAPSHOT" repositories { mavenCentral() } dependencies { implementation(kotlin("stdlib")) testImplementation("io.kotlintest:kotlintest-runner-junit5:3.1.7") } tasks.withType<Test> { useJUnitPlatform() }
Agora, clique no elefante no canto superior direito para carregar as alterações no Gradle.
Após isso, poderemos começar a programar. Você pode criar um arquivo em src/main/kotlin/
chamado main.kt
para ser o arquivo principal da aplicação.
Criando a classe Calculadora
Vamos criar um arquivo em src/main/kotlin/Calculadora.kt
que irá armazenar uma classe Calculadora
com alguns métodos que representam operações matemáticas:
class Calculadora { fun soma(x: Int, y: Int): Int { return x + y } fun subtração(x: Int, y: Int): Int { return x - y } fun multiplicação(x: Int, y: Int): Int { return x * y } fun divisão(x: Int, y: Int): Int { return x / y } }
Criando testes
Agora vamos criar uma pasta chamado src/main/tests/
e um arquivo calculadora.kt
dentro dessa pasta.
Essa pasta irá guardar todos os testes unitários do nosso projeto, e será usada pela Kotest para ver quais são os testes disponíveis.
Primeiro, vamos importar a kotest ao nosso arquivo:
import io.kotlintest.shouldBe import io.kotlintest.specs.StringSpec
Após isso, vamos criar uma variável chamada calculadora
que irá armazenar uma instância da nossa classe Calculadora
:
val calculadora = Calculadora()
Vamos criar uma classe chamada TestarCalculadora
, que irá armazenar os testes unitários da classe Calculadora
:
class TestarCalculadora: StringSpec({ })
- Nesse estilo
StringSpec
poderemos inserir um teste usando um texto que irá definir esse teste, aumentando a semântica.
Vamos adicionar o primeiro teste que será sobre a função soma
, primeiro, vamos colocar o texto do teste:
class TestarCalculadora: StringSpec({ "Testar soma da calculadora" { } })
- Podemos abrir um bloco para esse teste usando o texto que define o teste, seguido por
{}
Após isso, podemos inserir os testes dessa maneira:
class TestarCalculadora: StringSpec({ "Testar soma da calculadora" { calculadora.soma(10, 20).shouldBe(30) calculadora.soma(20, 20).shouldBe(40) calculadora.soma(50, 40).shouldBe(90) } })
- Usamos a função
soma
, passando os números, e após isso podemos usar a funçãoshouldBe
, que recebe um argumento, e obriga o resultado de uma função ser esse argumento recebido. - Por exemplo, passamos á função
soma
os valores10
e20
. Que irão resultar em30
. Após isso, usamos a funçãoshouldBe
para garantir que esse valor será30
.
Após isso, podemos repetir o mesmo processo para as outras operações, sempre criando um novo teste:
class TestarCalculadora: StringSpec({ "Testar soma da calculadora" { calculadora.soma(10, 20).shouldBe(30) calculadora.soma(20, 20).shouldBe(40) calculadora.soma(50, 40).shouldBe(90) } "Testar substração da calculadora" { calculadora.subtração(10, 20).shouldBe(-10) calculadora.subtração(20, 20).shouldBe(0) calculadora.subtração(30, 10).shouldBe(20) } "Testar multiplicação da calculadora" { calculadora.multiplicação(2, 5).shouldBe(10) calculadora.multiplicação(5, 5).shouldBe(25) calculadora.multiplicação(10, 7).shouldBe(70) } "Testar divisão da calculadora" { calculadora.divisão(10, 2).shouldBe(5) calculadora.divisão(30, 3).shouldBe(10) calculadora.divisão(60, 5).shouldBe(12) } })
Agora você pode clicar no menu do Gradle ao lado da tela, clique em Run Configurations
e em kotest [test]
para rodar os testes.
Com isso todos os testes irão passar e a classe Calculadora
estará testada.
Agora tente modificar algum teste intencionalmente para modificar o resultado e rode os teste novamente. Com isso, os testes resultarão em um erro, mostrando que a classe Calculadora
está sendo implementada de maneira incorreta segundo essa nova versão dos testes.
Finalização
Neste artigo você aplicou testes unitários com Kotest á uma calculadora. Busque aprender mais maneira de criar testes e diferentes estilos de testes para tornar esse conhecimento mais flexível.
Muito obrigada por ler ❤️🏳️⚧️ e me segue nas redes, é tudo @lissatransborda 👀
Top comments (0)