Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Code quality and automated tests on iOS Applica...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers. →

Code quality and automated tests on iOS Application

Palestra realizada no CocoaHeads SP no dia 25 de agosto, abordando assuntos como refatoração, testes unitários, funcionais e validação de interface pixel perfect.

Código da apresentação:
https://github.com/dchohfi/cocoaheads-sp-contacts

Avatar for Diego Chohfi

Diego Chohfi

August 25, 2015

More Decks by Diego Chohfi

Other Decks in Programming

Transcript

  1. @dchohfi wifi: 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.
  2. @dchohfi wifi: nu-guest / senha: visitando o nubank O que

    temos controle? 6 Código que escrevemos
  3. @dchohfi wifi: nu-guest / senha: visitando o nubank O que

    temos controle? 6 Código que escrevemos
  4. @dchohfi wifi: nu-guest / senha: visitando o nubank O que

    temos controle? 6 Código que escrevemos teoricamente
  5. @dchohfi wifi: nu-guest / senha: visitando o nubank O que

    fazemos antes de subir o app pra loja? 8
  6. @dchohfi wifi: 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
  7. @dchohfi wifi: nu-guest / senha: visitando o nubank ViewController Megazord

    14 • requisição web • parser de dados • tratamento de erro • envio de email
  8. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16
  9. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase
  10. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi
  11. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta
  12. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta Quick
  13. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta Quick cedar
  14. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi Quick cedar
  15. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar
  16. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar https://github.com/pivotal/cedar
  17. @dchohfi wifi: nu-guest / senha: visitando o nubank Agora que

    refatoramos (um pouco) vamos testar o que fizemos 16 XCTestCase Kiwi specta https://github.com/kiwi-bdd/Kiwi https://github.com/specta/specta Quick cedar https://github.com/pivotal/cedar https://github.com/Quick/Quick
  18. @dchohfi wifi: nu-guest / senha: visitando o nubank 17 @interface

    NUPersonTests : XCTestCase - (void)setUp {}
  19. @dchohfi wifi: nu-guest / senha: visitando o nubank 17 @interface

    NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  20. @dchohfi wifi: nu-guest / senha: visitando o nubank 17 @interface

    NUPersonTests : XCTestCase - (void)setUp {} - (void)testBlah {}
  21. @dchohfi wifi: nu-guest / senha: visitando o nubank E como

    testar requests http? 18 OHHTTPStubs Nocilla https://github.com/luisobo/Nocilla https://github.com/AliSoftware/OHHTTPStubs VCRURLConnection https://github.com/dstnbrkr/VCRURLConnection Stubs!
  22. @dchohfi wifi: nu-guest / senha: visitando o nubank Problema :(

    19 Como testar coisas assíncronas? O método acabou antes de ser validado
  23. @dchohfi wifi: nu-guest / senha: visitando o nubank XCTestExpectation 20

    Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  24. @dchohfi wifi: nu-guest / senha: visitando o nubank XCTestExpectation 20

    Testando de maneira assíncrona XCTestExpectation *expectation = [self expectationWithDescription:@"Exectation for contact request"];
  25. @dchohfi wifi: 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;
  26. @dchohfi wifi: 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];
  27. @dchohfi wifi: 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
  28. @dchohfi wifi: nu-guest / senha: visitando o nubank Porém 24

    Temos que testar a conexão? Temos que conhecer como biblioteca exibe o loading?
  29. @dchohfi wifi: 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?
  30. @dchohfi wifi: 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?
  31. @dchohfi wifi: 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.
  32. @dchohfi wifi: nu-guest / senha: visitando o nubank Mocks 25

    São objetos que simulam o comportamento de outros
  33. @dchohfi wifi: nu-guest / senha: visitando o nubank 26 ocmock

    OCMockito https://github.com/jonreid/OCMockito http://ocmock.org/
  34. @dchohfi wifi: nu-guest / senha: visitando o nubank 27 id

    contactsControllerMock = OCMClassMock([NUContactsController class]); Mock
  35. @dchohfi wifi: 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
  36. @dchohfi wifi: 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);
  37. @dchohfi wifi: 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];
  38. @dchohfi wifi: nu-guest / senha: visitando o nubank Testes funcionais

    28 KIF calabash Frank Subliminal appium 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
  39. @dchohfi wifi: nu-guest / senha: visitando o nubank KIF 29

    @interface NUContactsFunctionalTests : KIFTestCase Atores agindo na sua aplicação #define tester KIFActorWithClass(KIFUITestActor) macro tester