Objective-Cコードを単体テストする最良の方法は何ですか?


330

Objective-Cコードを単体テストするためにどのフレームワークが存在しますか?Apple Xcodeとうまく統合できるフレームワークが欲しいのですが。


私の知る限りでは、いくつかの回答は古くなっています。Appleは現在この問題に対処するのに役立つXCTestを持っています。ほとんどの回答は更新する必要があると思います。
ハニー

回答:


317

Xcodeには、Objective-CユニットテストフレームワークであるOCUnitに類似したXCTestが含まれており、プロジェクトのビルドプロセスの一部としてXCTestベースのユニットテストの実行を完全にサポートしています。Xcodeの単体テストのサポートについては、「Xcodeの概要:単体テストの使用」で説明しています。

Xcodeの2日前に、Xcodeの単体テストでいくつかの一般的なタスクを実行する方法に関する一連のブログ投稿を書きました。

XCTestではなくOCUnitを使用しているにもかかわらず、概念はほとんど同じです。

最後に、Cocoaユーザーインターフェイスのテストを作成する方法についてもいくつか投稿しました。ほとんどの場合、イベントループなどをスピンする必要がないので、Cocoaの構造は比較的簡単です。

これにより、モデルレベルのコードだけでなく、コントローラーレベルのコードやビューレベルのコードのテスト駆動型開発も可能になります。


5
Peter Hoseyは、12月にカリフォルニア州レイクフォレストで開催されるCocoaheadsミーティングで、Cocoaユニットテストに関する優れたプレゼンテーションも行いました。ビデオは次のとおり
Grant Limberg

1
1年ほど前にiOSを起動したとき、OCUnitには(私にとって)重大な欠点があることがわかりました。シミュレーターやデバイスで実行することはできません。それ以来変更されている可能性があります-私はチェックしていませんが、その理由のためにGHUnitを使用しています。
drekka

1
このテーマに関する公式のApple Developerビデオはありますか?私はWWDC 2011と2010を通過しましたが、何も見つかりませんでした...テストは重要なので、奇妙ですはい?
ロバート

4
XcodeユニットテストガイドのリンクがXcodeユニットテストガイド
Steven Greenに

5
Xcode 5にXCTestが追加されましたが、まだOCUnitが含まれていますか?XCode 5の情報で回答を更新しますか
BrightIntelDusk

50

Gabriel HandfordによるGHUnitをチェックしてください:

「GHUnitの目標は次のとおりです。

XCode内で単体テストを実行し、XCodeデバッガを完全に活用できるようにします。テストの視覚化に役立つシンプルなGUI。スタックトレースを表示します。シンプルな(またはそうでない)ターゲット設定で、(Cocoaアプリの)フレームワークとしてインストール可能であること。または、iPhoneプロジェクトに簡単にパッケージ化できます。」


5
GHUnitの+1!私はiPhone開発の初心者で、正直に言って、OCUnitの絶対的な悪夢やGTMの穏やかな片頭痛に比べて、GHUnitは大騒ぎせずに(手順は完璧です)稼働しています。GHUnitが使いやすさと使いやすさで勝ちました!
Tim Reddy、

3
この回答と付随するコメントは少し前に書かれたものであることに注意してください。Xcodeは、OCUnitベースのテストのサポートが大幅に向上し、テストを簡単に設定してデバッガで実行できるようになりました。
クリストファージョンソン2013

1
このプロジェクトは廃止されました。
BigHeadCreations 2018



12

Mac用Googleツールボックス(GTM)プロジェクトは、AppleのSenTestingKitフレームワーク(つまり、それ自体がOCUnitに基づいている)を単に拡張/拡張したものであることに注意してください。彼らがプロジェクトサイトで言うように:

GTMには、標準のSenTestingKitに対するいくつかの拡張機能があり、UIユニットテスト、自動バインディングユニットテスト、ログ追跡、iPhoneでのユニットテスト、およびコードの静的および動的テストを行うためのツールを実行できます。

ユーザーインターフェイステストに関する次のコメントに注意してください。

GTMは、ユーザーインターフェースの単体テストを幅広くサポートしています。ほとんどすべての標準のCocoa / UIKit UIオブジェクトのイメージングおよび/または内部状態のテストをサポートし、このサポートを独自のUIオブジェクトに簡単に拡張できます。

使用方法については、「コード検証と単体テスト」ページを参照してください。


12

GHUnitはObjective-Cの最も高度なテストフレームワークであるという結論に達しました。私は私のブログでテストフレームワークのまとめを行いました。これは、デプロイメント(iphone、シミュレーター、またはmac osネイティブ)およびアサート機能の点で最も柔軟です。これはGTMに基づいているため、GenのSenTestingKitに対する利点をすべて継承しますが、さらに多くのことを追加します。別のボーナスは、それが非常に積極的に維持されていることです。

私はOCMockをGHUnit に統合する努力をしました、それは素晴らしい働きをします!。コードはgithubで入手できます。


12

これは古い質問だと思いますが、xUnitスタイルのテスト(Test :: Unit、JSUnit、JUnitなど)よりもBDDスタイルのテスト(rspec、Jasmineなど)を好む場合は、Cedarのチェックアウトを検討してください。。CedarはObjective-CにBDDスタイルのテストをもたらし、言語がクロージャーをサポートするようになりました。

私たちは、Pivotal Labsの iOSプロジェクトでCedarをうまく利用しており、その改善に積極的に取り組んでいます。フィードバックや提案はcedar-discuss@googlegroups.comで歓迎されます


10

また、カバレッジツールを使用して、コードのどの部分が単体テストでカバーされ、どの部分がカバーされていないかを確認することをお勧めします。基本的なラインおよびブランチコードカバレッジは、GCOVツールで生成できます。優れたHTMLカバレッジレポートを生成したい場合は、LCOVZCOVがそれを行います。





7

Sen:te(Xcodeに含まれているテストフレームワークの作成者)は、OCUnitをiPhoneプロジェクトで使用する方法を説明しています:simple-iphone-ipad-unit-test




4

SimpleUnitTestはiPhoneとiPadのライブラリで動作します。

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

ユニットテストクラスを簡単に追加できるユニットテストXcodeテンプレートが付属しています。GTMをラップします。

それを文字通りアクティブなプロジェクトにドロップし、3分以内(またはそれ未満)に単体テストの追加を開始できます。


Er ..実行するとすぐに失敗するはずですか?
量子ポテト2011

3

Spectaは、XCTest上で実行される最新のTDD(テスト駆動開発)/ BDD(動作駆動開発)フレームワークです。iOSおよびMac OS Xプロジェクトの単体テストをサポートしています。


0

「SenTestKit」を使用して、あらゆるメソッドをテストできることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.