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

Code quality and automated tests on iOS Applica...

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

Diego Chohfi

August 25, 2015
Tweet

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