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.

Kim
fonte
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.

Chris Hanson
fonte
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 ".

Paul Robinson
fonte
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
18

Comecei a usar o equipamento de teste da caixa de ferramentas do Google para iPhone, e está funcionando muito bem para mim.

google-toolbox-para-mac

Ryan Townshend
fonte
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.

Clint Harris
fonte
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 .

Johannes Rudolph
fonte
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 [email protected]

Adam Milligan
fonte
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.

Nikita Zhuk
fonte
7

Sen: te (o criador da estrutura de teste incluída no Xcode) explica como usar o OCUnit em um projeto do iPhone: simple-iphone-ipad-unit-test .

nst
fonte
6

Matt Gallagher, do Cocoa with Love, tem um artigo muito bom sobre testes de unidade.

Mihir Mathuria
fonte
4

Eu uso o SimpleUnitTest funciona com bibliotecas do iPhone e iPad.

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

Ele vem com um modelo Xcode de teste de unidade para adicionar facilmente uma classe de teste de unidade. Envolve o GTM.

Você pode literalmente colocá-lo em um projeto ativo e começar a adicionar testes de unidade em 3 minutos (ou menos).

C. Bess
fonte
Er .. é suposto falhar assim que você o executa?
Quantumpotato
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.

dbainbridge
fonte
0

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

Karthik
fonte