Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Melhore Seus Testes em Kotlin com Mockk
Search
Angélica Oliveira
May 29, 2019
Programming
340
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Melhore Seus Testes em Kotlin com Mockk
Angélica Oliveira
May 29, 2019
More Decks by Angélica Oliveira
See All by Angélica Oliveira
Android in 2024: New Frontiers, Technologies, and Opportunities for Developers
angelicaoliveira
0
140
Crie Aplicativos Inteligentes para Android: Explorando a Gemini API
angelicaoliveira
0
110
Explorando as Novidades do Android: Aprimore seus Aplicativos para uma Experiência Premium
angelicaoliveira
0
93
Android 12 e suas novidades anunciadas no Google IO 2021
angelicaoliveira
1
56
Android Development, career and first steps
angelicaoliveira
0
51
A importância dos testes de UI para o desenvolvimento Android: Desde Espresso até testes para Jetpack Compose
angelicaoliveira
0
110
Como otimizar a entrega de seu aplicativo Android com App Bundle?
angelicaoliveira
0
53
Sequence x Iterable em Kotlin
angelicaoliveira
0
150
Dividir para conquistar Modularização e Features Dinâmicas no Android
angelicaoliveira
1
550
Other Decks in Programming
See All in Programming
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
210
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
120
VibeCodingからAgenticWorkflowへ
starfish719
0
640
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
640
数百円から始めるRuby電子工作
tarosay
0
160
改善しないと、タスクが回らない。 “てんこ盛りポジション” を引き継いだ情シスの、入社3ヶ月の業務改善録
krm963
0
270
Google Apps Script で Ruby を動かす
kawahara
0
270
メールのエイリアス機能を履き違えない
isshinfunada
0
240
FDEが実現するAI駆動経営の現在地
gonta
2
290
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
320
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.1k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
390
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.7k
Become a Pro
speakerdeck
PRO
31
6.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
390
New Earth Scene 8
popppiees
3
2.5k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
The Invisible Side of Design
smashingmag
301
52k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
300
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
280
Automating Front-end Workflow
addyosmani
1369
210k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Transcript
MELHORE SEUS TESTES EM KOTLIN COM MOCKK Angélica Oliveira Rafael
Toledo
MOCKS (INTRO) Mocks são uma forma de isolar o sistema
que está sendo testado dos componentes que este sistema depende. SUT: System Under Test DOC: Depended On Component
class Dependency1(val value1: Int) class Dependency2(val value2: String) class SystemUnderTest(
val dependency1: Dependency1, val dependency2: Dependency2) { fun calculate() = dependency1.value1 + dependency2.value2.toInt() } MOCKS (INTRO) Exemplo de classe em Kotlin:
@Test fun calculateAddsValues() { val doc1 = mockk<Dependency1>() val doc2
= mockk<Dependency2>() every { doc1.value1 } returns 5 every { doc2.value2 } returns "6" val sut = SystemUnderTest(doc1, doc2) assertEquals(11, sut.calculate()) } MOCKS (INTRO) Testes usando mocks como dependência:
@Test fun calculateAddsValues() { val doc1 = mockk<Dependency1>() val doc2
= mockk<Dependency2>() every { doc1.value1 } returns 5 every { doc2.value2 } returns "6" val sut = SystemUnderTest(doc1, doc2) assertEquals(11, sut.calculate()) } MOCKS (INTRO) Testes usando mocks como dependência:
@Test fun calculateAddsValues() { val doc1 = mockk<Dependency1>() val doc2
= mockk<Dependency2>() every { doc1.value1 } returns 5 every { doc2.value2 } returns "6" val sut = SystemUnderTest(doc1, doc2) assertEquals(11, sut.calculate()) } MOCKS (INTRO) Testes usando mocks como dependência:
@Test fun calculateAddsValues() { val doc1 = mockk<Dependency1>() val doc2
= mockk<Dependency2>() every { doc1.value1 } returns 5 every { doc2.value2 } returns "6" val sut = SystemUnderTest(doc1, doc2) assertEquals(11, sut.calculate()) } MOCKS (INTRO) Testes usando mocks como dependência:
• Notação nativa de Java • Problemas de nulabilidade •
Problemas com imutabilidade MOCKITO x KOTLIN
val service = Mockito.mock(Service::class.java) MOCKITO x KOTLIN
val service = Mockito.mock(Service::class.java) MOCKITO x KOTLIN
val service = Mockito.mock(Service::class.java) Mockito.`when`(service.fetchData()).thenReturn(...) MOCKITO x KOTLIN
val service = Mockito.mock(Service::class.java) Mockito.`when`(service.fetchData()).thenReturn(...) MOCKITO x KOTLIN
val service = Mockito.mock(ServiceImpl::class.java) MOCKITO x KOTLIN
val service = Mockito.mock(ServiceImpl::class.java) org.mockito.exceptions.base.MockitoException: Mockito cannot mock/spy following: com.thoughtworks.radar.ServiceImpl
– final classes – anonymous classes – primitive types MOCKITO x KOTLIN
Mockito.`when`(service).fetchUserWithId(any()) .thenReturn(mockUser) MOCKITO x KOTLIN
Mockito.`when`(service).fetchUserWithId(any()) .thenReturn(mockUser) MOCKITO x KOTLIN
Mockito.`when`(service).fetchUserWithId(any()) .thenReturn(mockUser) java.lang.NullPointerException MOCKITO x KOTLIN
MOCKK • Biblioteca para mocks em Kotlin • Possibilita escrever
testes de forma mais concisa • Features da linguagem são aproveitadas (lambdas, coroutines…)
EXEMPLOS Argument matchers: every { mock.call(more(5)) } returns 1 every
{ mock.call(or(less(5), eq(5))) } returns -1 any(), isNull(), ofType(type) Lista completa em: https://mockk.io/#matchers
EXEMPLOS Resposta esperada: every { mock1.call(5) } returnsMany listOf(1, 2,
3) every { mock1.call(5) } returns 1 andThen 2 andThen 3
EXEMPLOS Resposta esperada: every { mock1.call(5) } throws RuntimeException("error happened")
EXEMPLOS Relaxed mocks: val mock = mockk<Divider>(relaxed = true)
EXEMPLOS - MOCK DE OBJECTS object MockObj { fun add(a:
Int, b: Int) = a + b } mockkObject(MockObj) // aplica o mock ao Object assertEquals(3, MockObj.add(1, 2)) every { MockObj.add(1, 2) } returns 55 assertEquals(55, MockObj.add(1, 2))
EXEMPLOS - MOCK DE EXTENSION FUNCTIONS data class Obj(val value:
Int) // declarado no arquivo File.kt (pacote "pkg") fun Obj.extensionFunc() = value + 5 mockkStatic("pkg.FileKt") every { Obj(5).extensionFunc() } returns 11 assertEquals(11, Obj(5).extensionFunc()) verify { Obj(5).extensionFunc() }
EXEMPLOS - MOCK DE COROUTINES val car = mockk<Car>() coEvery
{ car.drive(Direction.NORTH) } returns Outcome.OK car.drive(Direction.NORTH) // returns OK coVerify { car.drive(Direction.NORTH) }
MOCKK NO ANDROID • Funciona com o uso da dependência
mockk-android • Compartilhamento entre mocks testImplementation 'io.mockk:mockk:1.9.3' androidTestImplementation 'io.mockk:mockk-android:1.9.3'
#TWTechRadar Feedbacks?
[email protected]
ou
[email protected]
OBRIGADA!