Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
99
Android 12 e suas novidades anunciadas no Google IO 2021
angelicaoliveira
1
60
Android Development, career and first steps
angelicaoliveira
0
58
A importância dos testes de UI para o desenvolvimento Android: Desde Espresso até testes para Jetpack Compose
angelicaoliveira
0
120
Como otimizar a entrega de seu aplicativo Android com App Bundle?
angelicaoliveira
0
56
Sequence x Iterable em Kotlin
angelicaoliveira
0
150
Dividir para conquistar Modularização e Features Dinâmicas no Android
angelicaoliveira
1
560
Other Decks in Programming
See All in Programming
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
120
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
200
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.7k
GraphQL の onError と Nullability のこれから
quramy
0
180
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
130
sbt 2.0: takeoff
eed3si9n
0
170
AIに “答え“を書かせるのを やめてみた
___akari11
0
130
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
930
Event is what happens
moro
2
1.5k
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
200
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
The SEO Collaboration Effect
kristinabergwall1
1
600
A Soul's Torment
seathinner
8
3.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
840
Odyssey Design
rkendrick25
PRO
2
890
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
880
Designing for humans not robots
tammielis
254
26k
Ruling the World: When Life Gets Gamed
codingconduct
0
420
The Language of Interfaces
destraynor
162
27k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
420
Faster Mobile Websites
deanohume
310
32k
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!