Skip to content

Instantly share code, notes, and snippets.

View phellipealexandre's full-sized avatar
🎯
Focusing

Phellipe Silva phellipealexandre

🎯
Focusing
View GitHub Profile
@phellipealexandre
phellipealexandre / MockMockK.kt
Created November 11, 2020 01:43
Configuração de um Mock utilizando api do MockK.
@Test
fun `Track analytics event when creating new note`() {
val analyticsWrapperMock = mockk<AnalyticsWrapper>() //Dublê de teste Mock
val noteAnalytics = NoteAnalytics(analyticsWrapperMock)
noteAnalytics.trackNewNoteEvent(NoteType.Supermarket)
//Mock verifica que comportamento específico aconteceu
verify(exactly = 1) { analyticsWrapperMock.logEvent("NewNote", "SuperMarket") }
}
@phellipealexandre
phellipealexandre / StubMockK.kt
Last active November 11, 2020 01:45
Configuração de um Stub utilizando api do MockK.
@Test
fun `Retrieve notes count from server when requested`() {
val notesApiStub = mockk<NotesApi>() //Dublê de teste Stub
val noteRepository = NoteRepository(notesApiStub)
val note = generateDummyNote() //Método privado
every { notesApiStub.fetchAllNotes() } returns listOf(note, note)
val allNotesCount = noteRepository.getNoteCount()
assertEquals(expected = 2, actual = allNotesCount)
@phellipealexandre
phellipealexandre / SpyExample.kt
Created November 11, 2020 01:39
Exemplo onde substituimos a dependencia de AnalyticsWrapper por um Spy que irá "gravar" as chamadas. A assertiva estará implementada dentro do Spy.
@Test
fun `Track analytics event when creating new note`() {
val analyticsWrapperSpy = //Dublê de teste Spy
val noteAnalytics = NoteAnalytics(analyticsWrapperSpy)
//Spy grava o comportamento por debaixo dos panos
noteAnalytics.trackCreateNewNoteEvent(NoteType.Supermarket)
//Spy verifica que comportamento ocorreu baseado em implementação interna
analyticsWrapperSpy.assertThatNewNoteEventWasRegistered("SuperMarket")
@phellipealexandre
phellipealexandre / MockExample.kt
Created November 11, 2020 01:38
Exemplo de utilização de um Mock que verifica que um método específico foi chamado.
@Test
fun `Track analytics event when creating new note`() {
val analyticsWrapperMock = //Dublê de teste Mock
val noteAnalytics = NoteAnalytics(analyticsWrapperMock)
noteAnalytics.trackNewNoteEvent(NoteType.Supermarket)
//Mock verifica que comportamento específico aconteceu
verify(exactly = 1) { analyticsWrapperMock.logEvent("NewNote", "SuperMarket") }
}
@phellipealexandre
phellipealexandre / FakeExample.kt
Last active November 14, 2020 11:29
Exemplo onde substituímos a dependência de uma API por um Fake. O comportamento desse Fake estará implementado na própria classe FakeNoteApi.
@Test
fun `Retrieve all notes when requested`() {
//Dublê de teste Fake. Implementa a mesma interface do original.
val noteApiFake = FakeNoteApi()
val noteRepository = NoteRepository(noteApiFake)
val note = //Dublê de teste Dummy
noteApiFake.uploadNote(note)
noteApiFake.uploadNote(note)
//Fake será utilizado por debaixo dos panos com uma implementação real
@phellipealexandre
phellipealexandre / StubExample.kt
Last active November 14, 2020 11:26
Exemplo onde substituímos a dependência de uma API por um Stub e configuramos o retorno desse Stub para ser uma resposta fixa.
@Test
fun `Retrieve notes count from server when requested`() {
val notesApiStub = //Dublê de teste Stub
val noteRepository = NoteRepository(notesApiStub)
//Configuração do Stub. Valor hard-coded retornado será uma lista com 2 notas.
//Esse método será chamado pelo noteRepository.getNoteCount()
val note = //Dublê de teste Dummy
every { notesApiStub.fetchAllNotes() } returns listOf(note, note)
@phellipealexandre
phellipealexandre / OtherDummies.kt
Created November 11, 2020 01:30
Dummies gerados sem ajuda de ferramentas
val dummyPrice = 10.0 //Dummy literal
val dummyUniqueCustomerNumber = getUniqueNumber() //Dummy auto gerado
@phellipealexandre
phellipealexandre / DummyExample.kt
Created November 11, 2020 01:18
Exemplo simples de utilização de um Dummy em um teste
@Test
fun `Update registered note count when registering a new note in empty repository`() {
val dummyNote = //Dublê de teste Dummy
//Passado apenas preencher o parâmetro, o conteúdo do dublê não é tão relevante
noteRepository.registerNote(dummyNote)
assertEquals(expected = 1, actual = noteRepository.getNoteCount())
}
.PHONY: app
app:
[Instruction]
[Command]: [Dependent Command 1] ... [Dependent Command N]
(Tab ↹)[Instruction 1]
.
.
.
(Tab ↹)[Instruction N]