Objective-C 코드를 단위 테스트하는 가장 좋은 방법은 무엇입니까?


330

Objective-C 코드를 단위 테스트하기 위해 어떤 프레임 워크가 있습니까? Apple Xcode와 잘 통합 된 프레임 워크를 원합니다.


내가 아는 한 여기에 일부 답변이 오래되었습니다. Apple은 이제이 문제를 해결하는 데 도움이되는 XCTest를 가지고 있습니다. 대부분의 답변을 업데이트해야한다고 생각합니다.
Honey

답변:


317

Xcode에는 Objective-C 단위 테스트 프레임 워크 인 OCUnit 과 유사한 XCTest가 포함되어 있으며 프로젝트 빌드 프로세스의 일부로 XCTest 기반 단위 테스트 실행을 완벽하게 지원합니다. Xcode의 단위 테스트 지원은 Xcode 개요 : 단위 테스트 사용에 설명되어 있습니다.

Xcode에서 이틀 동안 Xcode 단위 테스트로 몇 가지 일반적인 작업을 수행하는 방법에 대한 일련의 웹 로그 게시물을 작성했습니다.

XCTest 대신 OCUnit을 사용하더라도 개념은 거의 동일합니다.

마지막으로 Cocoa 사용자 인터페이스 테스트를 작성하는 방법에 대한 글도 썼습니다. Cocoa가 구성되는 방식은 이벤트 루프 나 대부분의 경우와 같은 것을 회전시킬 필요가 없기 때문에 비교적 간단합니다.

이를 통해 모델 레벨 코드뿐만 아니라 컨트롤러 레벨 및 뷰 레벨 코드에 대한 테스트 중심 개발을 수행 할 수 있습니다.


5
Peter Hosey는 또한 12 월 캘리포니아 Cocoaheads 회의에서 Lake Forest에서 Cocoa Unit Testing에 대한 훌륭한 발표를했습니다. 여기 동영상이 있습니다 : vimeo.com/2725498
Grant Limberg

1
약 1 년 전에 iOS를 시작했을 때 OCUnit에 심각한 단점이 있음을 발견했습니다. 시뮬레이터 또는 장치에서 실행할 수 없었습니다. 그 이후로 변경되었을 수 있습니다-확인하지는 않았지만 그 이유 때문에 GHUnit을 사용하고 있습니다.
drekka

1
이 주제에 대한 공식 Apple Developer 비디오가 있습니까? 나는 WWDC 2011과 2010을 겪었지만 테스트가 중요하기 때문에 이상한 것을 찾을 수 없었습니다.
Robert

4
엑스 코드 단위 테스트 가이드 링크로 이동 한 Xcode의 단위 테스트 가이드
스티븐 그린

5
Xcode 5에 XCTest가 있는데 OCUnit이 여전히 포함되어 있습니까? XCode 5에 대한 정보로 답변을 업데이트
하시겠습니까?

50

Gabriel Handford의 GHUnit 을 확인하십시오 :

"GHUnit의 목표는 다음과 같습니다.

XCode 내에서 단위 테스트를 실행하여 XCode 디버거를 완전히 활용할 수 있습니다. 테스트를 시각화하는 데 도움이되는 간단한 GUI. 스택 추적을 표시합니다. 간단한 (또는 그렇지 않은) 대상 설정으로 프레임 워크 (Cocoa 앱용)로 설치 가능해야합니다. "아이폰 프로젝트에 쉽게 패키징 할 수 있습니다."


5
GHUnit +1! 나는 iPhone 개발에 익숙하지 않으며 OCUnit의 절대적인 악몽과 GTM의 가벼운 편두통과 비교할 때 GHUnit을 설치하고 소란없이 (지시가 완벽 함) 말한 것으로 솔직히 말할 수 있습니다. GHUnit은 유용성과 편의성을 위해 승리합니다!
Tim Reddy

3
이 답변과 함께 제공되는 의견은 얼마 전에 작성되었습니다. Xcode는 이제 OCUnit 기반 테스트를 훨씬 더 잘 지원하므로 테스트를 쉽게 설정하고 디버거에서 실행할 수 있습니다.
Kristopher Johnson

1
이 프로젝트는 더 이상 사용되지 않습니다.
BigHeadCreations



12

Mac 용 Google 툴박스 (GTM) 프로젝트는 Apple의 SenTestingKit 프레임 워크 (OCUnit을 기반으로 함)를 확장 / 확장합니다. 그들이 프로젝트 사이트에서 말하는 것처럼 :

GTM에는 표준 SenTestingKit가 몇 가지 향상되어 UI 단위 테스트, 자동 바인딩 단위 테스트, 로그 추적 및 iPhone에서 단위 테스트를 수행 할 수있을뿐만 아니라 정적 및 동적 코드 테스트 도구도 사용할 수 있습니다.

사용자 인터페이스 테스트에 대한 다음 의견을 참고하십시오.

GTM은 사용자 인터페이스 단위 테스트를 광범위하게 지원합니다. 거의 모든 표준 Cocoa / UIKit UI 객체의 이미징 및 / 또는 내부 상태 테스트를 지원하며,이 지원을 자신의 UI 객체로 쉽게 확장 할 수 있습니다.

사용 방법에 대한 지침은 " 코드 확인 및 단위 테스트 "페이지를 참조하십시오.


12

저는 GHUnit이 Objective-C의 가장 고급 테스트 프레임 워크라는 결론에 도달했습니다. 나는 짓을 검거을 내 블로그에 프레임 워크를 테스트합니다. 배포 (iphone, 시뮬레이터 또는 mac OS 기본) 측면에서 가장 유연하고 기능을 주장합니다. GTM을 기반으로하기 때문에 SenTestingKit에 비해 GTM의 모든 장점을 상속 받지만 더 많은 기능을 추가합니다. 또 다른 보너스는 그것이 매우 적극적으로 유지되고 있다는 것입니다.

OCMock 을 GHUnit 에 통합하려는 노력을 기울였습니다 . github 에서 코드를 얻을 수 있습니다 .


12

나는 이것이 오래된 질문이라는 것을 알고 있지만 xUnit 스타일 테스트 (Test :: Unit, JSUnit, JUnit 등)보다 BDD 스타일 테스트 (rspec, Jasmine 등)를 선호한다면 Cedar를 확인하는 것이 좋습니다. . Cedar는 이제 언어가 클로저를 지원하므로 BDD 스타일 테스트를 Objective-C에 제공합니다.

우리는 Pivotal Labs 의 iOS 프로젝트에 Cedar를 기쁘게 사용 하고 있으며 개선을 위해 적극적으로 노력하고 있습니다. cedar-discuss@googlegroups.com에서 의견이나 제안을 환영합니다


10

또한 커버리지 도구를 사용하여 코드의 어느 부분이 단위 테스트로 다루고 있지 않은지 확인하는 것이 좋습니다. 기본 회선 및 분기 코드 적용 범위는 GCOV 도구를 사용하여 생성 할 수 있습니다 . 멋진 HTML 적용 범위 보고서를 생성하려면 LCOVZCOV 가 있습니다.





7

Sen : te (Xcode에 포함 된 테스트 프레임 워크 제작자)는 iPhone 프로젝트에서 simple-iphone-ipad-unit-test OCUnit을 사용하는 방법을 설명합니다 .




4

iPhone 및 iPad 라이브러리에서 SimpleUnitTest를 사용합니다.

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

단위 테스트 클래스를 쉽게 추가 할 수있는 단위 테스트 Xcode 템플릿이 제공됩니다. GTM을 감 쌉니다.

말 그대로 활성 프로젝트에 드롭하고 3 분 이내에 유닛 테스트를 추가 할 수 있습니다.


어 .. 당신이 그것을 실행하자마자 실패해야합니까?
quantumpotato

3

SpectaXCTest 에서 실행되는 최신 TDD (Test Driven Development) / BDD (Behavior Driven Development) 프레임 워크입니다. iOS 및 Mac OS X 프로젝트에 대한 단위 테스트를 지원합니다.


0

나는 모든 방법을 테스트 할 수있는 'SenTestKit'을 사용할 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.