Qual é a melhor maneira de testar o código Objective-C de unidade?


330

Quais estruturas existem para testar o código Objective-C da unidade? Gostaria de uma estrutura que se integre perfeitamente ao Apple Xcode.


Que eu saiba, algumas respostas aqui estão desatualizadas. A Apple agora possui o XCTest, o que ajuda a solucionar esse problema. Acho que a maioria das respostas precisa ser atualizada.
Querida

Respostas:


317

O Xcode inclui o XCTest, que é semelhante ao OCUnit , uma estrutura de teste de unidade do Objective-C, e tem suporte total para a execução de testes de unidade baseados no XCTest como parte do processo de criação do seu projeto. O suporte ao teste de unidade do Xcode é descrito em Visão geral do Xcode: Usando testes de unidade .

Nos 2 dias do Xcode, escrevi uma série de postagens no blog sobre como executar algumas tarefas comuns com o teste de unidade do Xcode:

Apesar de usar o OCUnit em vez do XCTest, os conceitos são basicamente os mesmos.

Por fim, também escrevi alguns posts sobre como escrever testes para interfaces de usuário do Cocoa; a maneira como o cacau é estruturado o torna relativamente simples, porque na maioria dos casos você não precisa girar um loop de eventos ou algo assim.

Isso possibilita o desenvolvimento orientado a testes, não apenas para o código no nível do modelo, mas também para o código no nível do controlador e até no nível de visualização.


5
Peter Hosey também fez uma boa apresentação sobre o Teste de Unidade de Cacau na reunião de dezembro de Lake Lake, CA Cocoaheads. Aqui está um vídeo dele: vimeo.com/2725498
Grant Limberg

1
Quando iniciei o iOS, há cerca de um ano, descobri que o OCUnit tinha (para mim) uma séria desvantagem - não era possível executá-lo no simulador ou no dispositivo. Pode ter mudado desde então - eu não verifiquei, mas estou usando o GHUnit simplesmente por esse motivo.
drekka

1
Existem vídeos oficiais do desenvolvedor da Apple sobre esse assunto? Passei pela WWDC 2011 e 2010, mas não consegui encontrar ... estranho, pois os testes são importantes, sim?
Robert

4
O link do Xcode Unit Testing Guide mudou para o Xcode Unit Testing Guide
Steven Green

5
O Xcode 5 agora possui o XCTest ainda inclui o OCUnit? Você irá atualizar a sua resposta com informações para XCode 5.
BrightIntelDusk

50

Confira GHUnit de Gabriel Handford:

"Os objetivos do GHUnit são:

Executa testes de unidade no XCode, permitindo que você utilize totalmente o depurador do XCode. Uma GUI simples para ajudá-lo a visualizar seus testes. Mostrar rastreamentos de pilha. Seja instalável como uma estrutura (para aplicativos Cocoa) com uma configuração de destino simples (ou não); ou fácil de empacotar no seu projeto do iPhone ".


5
+1 para GHUnit! Eu sou novo no desenvolvimento do iPhone e posso dizer honestamente que o GHUnit estava funcionando sem problemas (as instruções são perfeitas) em comparação com o pesadelo absoluto do OCUnit e a leve enxaqueca do GTM. GHUnit vence pela usabilidade e facilidade!
Tim Reddy

3
Observe que esta resposta e os comentários anexos foram escritos há algum tempo. O Xcode agora oferece suporte muito melhor aos testes baseados no OCUnit, facilitando a configuração e a execução de testes no depurador.
Kristopher Johnson

1
Este projeto foi descontinuado.
BigHeadCreations



12

Observe que o projeto Google Toolbox for Mac (GTM) simplesmente estende / aumenta a estrutura SenTestingKit da Apple (que é baseada no OCUnit). Como se costuma dizer no site do projeto:

O GTM possui vários aprimoramentos no SenTestingKit padrão, permitindo que você faça testes de unidade de interface do usuário, testes automatizados de unidade de encadernação, rastreamento de log e teste de unidade no iPhone, além de ferramentas para realizar testes estáticos e dinâmicos de seu código.

Observe o seguinte comentário sobre o teste da interface do usuário:

O GTM possui amplo suporte para testes de unidade de interface com o usuário. Ele suporta o teste da imagem e / ou do estado interno de quase todos os objetos de interface de usuário padrão do Cocoa / UIKit e facilita a extensão desse suporte aos seus próprios objetos de interface do usuário.

Consulte a página " Verificação de código e teste de unidade " para obter instruções sobre como usá-lo.


12

Cheguei à conclusão de que o GHUnit é a estrutura de teste mais avançada para o Objective-C. Eu fiz um resumo das estruturas de teste no meu blog. É o mais flexível em termos de implantação (iphone, simulador ou mac os nativo) e recursos de afirmação. Por ser baseado no GTM, ele herda todas as vantagens do GTM sobre o SenTestingKit, mas também acrescenta muito mais. Outro bônus é que ele está sendo mantido de forma muito ativa.

Eu realizei um esforço para integrar o OCMock ao GHUnit, funciona muito bem! Você pode obter o código no github .


12

Sei que essa é uma pergunta antiga, mas se você preferir testes no estilo BDD (rspec, Jasmine, etc.) em vez de testes no estilo xUnit (Test :: Unit, JSUnit, JUnit etc.), considere dar uma olhada no Cedar . O Cedar leva o teste no estilo BDD ao Objective-C, agora que o idioma suporta fechamentos.

Felizmente, estamos usando o Cedar para nossos projetos iOS no Pivotal Labs e estamos trabalhando ativamente para aprimorá-lo. Quaisquer comentários ou sugestões são bem-vindos em cedar-discuss@googlegroups.com


10

Eu também recomendaria o uso de ferramentas de cobertura para ver qual parte do código é coberta com testes de unidade e quais não. A cobertura básica de linha e código de ramificação pode ser gerada com a ferramenta GCOV . Se você deseja gerar bons relatórios de cobertura HTML, existem LCOV e ZCOV que fazem exatamente isso.









3

O Specta é uma estrutura moderna de TDD (Test Driven Development) / BDD (Behavior Driven Development) que roda sobre o XCTest. Ele suporta testes de unidade para projetos iOS e Mac OS X.


0

Espero que você possa usar 'SenTestKit', a partir do qual você pode testar todos os métodos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.