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 / 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 / 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 / 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 / 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 / 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 / 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") }
}
@Test
fun `Update registered note count when registering a new note in empty repository`() {
val dummyNote = //Dummy
noteRepository.registerNote(dummyNote) //Just filling the parameter, the double's content is not relevant for the test
val allNotes = noteRepository.getNotes()
assertEquals(expected = 1, actual = allNotes.size)
}
//----- Literal dummy -----
val dummyPrice = 10.0
//----- Generated dummy -----
val dummyCustomer = CustomerTestBuilder.build()
//----- Alternative empty implementation -----
val dummyNote = DummyNote()
class DummyNote(): Note //No implementation
@Test
fun `Retrieve notes count from server when requested`() {
val notesApiStub = //Stub
val note = //Dummy
val noteRepository = NoteRepository(notesApiStub) //System under test
//Stub configuration. Hard-coded value returned will be a list with 2 entries.
//This method is going to be called by noteRepository.getNoteCount()
every { notesApiStub.fetchAllNotes() } returns listOf(note, note)
@Test
fun `Retrieve all notes when requested`() {
val noteApiFake = FakeNoteApi() //Fake double implementing the same interface as the original
val noteRepository = NoteRepository(noteApiFake) //System under test
val note = //Dummy
noteApiFake.uploadNote(note) //Configuring the fake
noteApiFake.uploadNote(note) //Configuring the fake
//Fake with real and lightweight implementation is going to be used under the hoods
val allNotes = noteRepository.getNotes()