Upload
diego-chohfi
View
790
Download
1
Embed Size (px)
Citation preview
@dchohfiwifi: nu-guest / senha: visitando o nubank
Como garantir a qualidade de um app?
5
• processo de submissão • regras aleatórias impostas pela nave mãe • 7 dias de aprovação (se a Apple ajudar) • Apple não aceita os aplicativos pq é fresca mesmo.
@dchohfiwifi: nu-guest / senha: visitando o nubank
O que temos controle?
6
Código que
escrevemosteoricamente
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mas sinceramente, seu APP hoje em dia funciona?
7
@dchohfiwifi: nu-guest / senha: visitando o nubank
Testes unitários
13
Além de garantir que a lógica está correta
Mostra se o código é “bom" ou não
@dchohfiwifi: nu-guest / senha: visitando o nubank
ViewController Megazord
14
• requisição web • parser de dados • tratamento de erro • envio de email
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCase
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
specta
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectaQuick
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectaQuick cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectahttps://github.com/kiwi-bdd/Kiwi
Quick cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta
Quick cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta
Quick cedarhttps://github.com/pivotal/cedar
@dchohfiwifi: nu-guest / senha: visitando o nubank
Agora que refatoramos (um pouco) vamos testar o que fizemos
16
XCTestCaseKiwi
spectahttps://github.com/kiwi-bdd/Kiwihttps://github.com/specta/specta
Quick cedarhttps://github.com/pivotal/cedar
https://github.com/Quick/Quick
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
- (void)testBlah {}
@dchohfiwifi: nu-guest / senha: visitando o nubank 17
@interface NUPersonTests : XCTestCase
- (void)setUp {}
- (void)testBlah {}
@dchohfiwifi: nu-guest / senha: visitando o nubank
E como testar requests http?
18
OHHTTPStubs
Nocillahttps://github.com/luisobo/Nocilla
https://github.com/AliSoftware/OHHTTPStubs
VCRURLConnection
https://github.com/dstnbrkr/VCRURLConnection
Stubs!
@dchohfiwifi: nu-guest / senha: visitando o nubank
Problema :(
19
Como testar coisas assíncronas?O método acabou antes de ser validado
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(XCWaitCompletionHandler)handlerOrNil;
@dchohfiwifi: nu-guest / senha: visitando o nubank
XCTestExpectation
20
Testando de maneira assíncrona
XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
- (void)waitForExpectationsWithTimeout:(NSTimeInterval)timeout handler:(XCWaitCompletionHandler)handlerOrNil;
[expectation fulfill];
@dchohfiwifi: nu-guest / senha: visitando o nubank
Comos testar a ViewController?
23
• Quando a tela for carregada • Precisamos tentar carregar os contatos • Exibir um loading enquanto carrega • Depois que carregar, exibir mensagem de sucesso • Preencher a tabela com os contatos
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?Ou como ela mostra o sucesso?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?Ou como ela mostra o sucesso?
Ou como a tabela monta os resultados?
@dchohfiwifi: nu-guest / senha: visitando o nubank
Porém
24
Temos que testar a conexão?
Temos que conhecer como biblioteca exibe o loading?Ou como ela mostra o sucesso?
Ou como a tabela monta os resultados?
NÃO! Precisamos apenas ter certeza que serão feitas.
@dchohfiwifi: nu-guest / senha: visitando o nubank
Mocks
25
São objetos que simulam o comportamento de outros
@dchohfiwifi: nu-guest / senha: visitando o nubank 26
ocmockOCMockito
https://github.com/jonreid/OCMockito
http://ocmock.org/
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]);
Expect
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]);
Expect
Verifica OCMVerifyAll(contactsControllerMock);
@dchohfiwifi: nu-guest / senha: visitando o nubank 27
id contactsControllerMock = OCMClassMock([NUContactsController class]);
Mock
OCMExpect([contactsControllerMock getContactsWithBlock: [OCMArg checkWithBlock:^BOOL(NUArrayCompletionBlock obj) { obj(self.contacts, nil); return YES; }]]);
Expect
Verifica OCMVerifyAll(contactsControllerMock);
Cancelar Mock[contactsControllerMock stopMocking];
@dchohfiwifi: nu-guest / senha: visitando o nubank
Testes funcionais
28
KIF calabashFrank
Subliminalappium https://github.com/kif-framework/KIF
https://github.com/calabash/calabash-ios https://github.com/inkling/Subliminal
http://appium.io/ https://github.com/TestingWithFrank/Frank
@dchohfiwifi: nu-guest / senha: visitando o nubank
KIF
29
@interface NUContactsFunctionalTests : KIFTestCase
Atores agindo na sua aplicação
#define tester KIFActorWithClass(KIFUITestActor)
macro tester