2012-12-14 15 views
11

私はUnit Testingを一度も使用していませんし、その使用方法を理解していますが、いつどのように使用するのか分かりません。XCode unit testing

私はそれは多分いくつかの例で、ユニットテストを使用するように価値がある際に知っていただきたいと思います。

+2

「それはユニットテストを使用するように価値がある」 - いくつかは、それは常に避けられないと主張しています。大規模なプロジェクト**と**のライブラリにのみ必要だと言いたいと思います。 –

+1

検索[ここ](http://stackoverflow.com/questions/33207/what-is-the-best-way-to-unit-test-objective-c-code)。単体テストオプションとチュートリアルに関する完全な情報。 – rsswtmr

+1

良い用途は、サーバーにURL接続するアプリを持っている場合です。ユニットテストでそれらを別々に設定して、アプリケーションを実行することなくテストすることができます。 –

答えて

9

ほとんどの場合、単体テストを行うべきであり、単体テストを考慮してコードを記述する必要があります。 過激派はコードを書く前からテストを書いています(TDD - テスト駆動開発と呼ばれています)。

私はあなたの実際の生活の例をあげる:私は最近、「間隔」をサポートソートにNSArrayをコーディングする必要がありました。つまり、配列は間隔を挿入して並べ替える方法を知っている必要があります。例えば

、アレイは次のようになります。[1-3、5-9、12-50]。この例では、配列に3つの区間があり、わかるように、配列がソートされています。私は私のクラスを書いた後 、私は、それが正しく動作することを確認するためにテストを書き、Iまたは他の誰かが、将来的には、コードに変更を加えた場合、私はそれを「壊す」ではないだろうことをしなければならなかった(私はIntervalsArrayそれと呼ばれます)。ここ

は、いくつかの例示的な試験である(擬似コード):

試験1:私はカバー15回のテストのようなものであった終わり

- Create a new IntervalsArray 
- Insert 2 intervals into the array: [1-3] and [5-9] 
- (TEST) make sure there are 2 items in the array 
- (TEST) make sure interval [1-3] comes before interval [5-9] 

- Create a new IntervalsArray 
- Insert a new interval to the array 
- (TEST) make sure the array has 1 object in it 

試験2私の新しい配列のあらゆる側面。

ここにはgood unit-testing with Xcode tutorialがあります。

UIをテストするためにロジックテスト(ユニットテストよりも複雑です)を記述することもできます。アップルのUIテスト方法であるUIAutomationについて少しお読みください。完璧ではありませんが、かなり良いです。これについてはHere's an excellent tutorialです。

あなた自身が優れたプログラマだと考えるなら、コードの単体テストを書くべきです。

+2

Hello Worldの場合でも、「あなたは常に単体テストにしてください。 (いいえ、そうではありません。合理的なままにしましょうか?) –

+0

OK、私の答えを編集しました。 –

+0

@ EliGanemありがとうございます。 –

1

いつでも自分のものではないクラスを持つアプリケーションを書く。それは単体テストを追加し、それらのクラスをテストする良い機会です。

すべてが、最も基本的なアプリケーションは、そのほとんど常に良いアイデアので、ユニットテストに、独自のクラスを持っています。

あなたは他のプログラマが使用するライブラリの作成、またはあなたが複数のプロジェクトで使用されますことをしている場合、それらは常にユニットテストを持っている必要があります。

単体テストは、新しいバージョンのOSが出てくるなど、物事が変わったときに多くの時間を節約できます。単体テストでテストし、アプリケーションをテストするほうがはるかに優れています。

3

あなたが管理しなければならないコードを書くときは、いつでもユニットテストを書くことができます。つまり、コードを変更しても動作を維持するなど、何かをリファクタリングする必要がある場合です。これは、生産コードのすべてのビットです。

「Hello、World」の反例は、捨てようとしているコードを気にすることではありません。 「スパイクソリューション」とは、問題へのアプローチ方法を理解することです。あなたがそれを理解したら、それを捨てて、もう一度始めましょう。今回は、テストから始めます。

TDDの「過激派」と呼ぶと、それは非合理的で実用的ではありません。実際、TDDを学ぶと、時間と費用が節約できます。

TDDの動作例については、Unit Testing Example with OCUnitを参照してください。

13

他の回答は、の場合はと表示されますが、実際にはでない場合は、の回答も追加してください。

あなたが維持しようとしている生産のコードを書いている任意の時間を、あなたはそれのためのユニットテストを持っている必要があり

。最初の5分ほど

されています。私はこの上で見た最も有用なトレーニングは、次の2部構成のビデオシリーズでしたちょっと紹介して、その最後までスキップすることができます。

どのように

私はSwiftでXcode 7を使用しています。

新しいプロジェクトを開始し、ユニットテストを追加します。

私はMyProjectと呼んでいます。 Project NavigatorでMyProjectTestsグループを開くと、MyProjectTest.swiftというユニットテストファイルが既に作成されていることがわかります。

enter image description here

あなたは今のところ、すべての例のメソッドを削除し、独自のクラスのメソッドをテストするために、新しいfuncを追加することができます。先頭には@testable import MyProjectという行を追加してください。プロジェクト名に空白が含まれている場合は、空白をアンダースコアに置き換えます。たとえば、「My Example Project」は@testable import My_Example_Projectを使用します。

私はtestMethodNameBeingTested_Senario_ExpectedBehaviorという名前パターンに従っています。ユニットテスト名は "test"で始まる必要があります。

私はこのようなものでしょう:私たちはまだMyClassクラスを追加していないので、もちろん

import XCTest 
@testable import MyProject 

class MyProjectTests: XCTestCase { 

    func testSum_TwoNumbers_ReturnsSum() { 
     // Arrange (set up the needed objects) 
     let myClass = MyClass() 

     // Act (run the method you want to test) 
     let sum = myClass.sum(1, 2) 

     // Assert (test that the behavior is as expected) 
     XCTAssertEqual(sum, 3) 

    } 
} 

を、ビルドは失敗します。

クラスを追加してください。

MyClassというMyProjectにSwiftファイルを追加しています。

class MyClass { 

    func sum(a: Int, _ b: Int) -> Int { 
     return a + b 
    } 
} 

私が実際にTDDの原則に従っていたのであれば、関数名を追加するだけで正しい値を返すことはできません。しかし、簡潔にするために、今私は全部の方法にちょうど向いています。

テストユニットクラスまたはメソッドの横にあるテストボタンを押して、テストをもう一度実行すると、テストユニットは合格になります。

sumメソッドのreturn 0のようなものを、MyClassのようにすることができます(ユニットテストの重要な部分)。

enter image description here

あなたが戻ってこれを修正して、より多くのユニットテストを追加することができます。そして、あなたがテストを実行すると、次のを見るでしょう。必要に応じて、異なるクラスのユニットテストファイルを作成することもできます。 Project NavigatorでMyProjectTestグループを右クリックし、 "New File"を選択し、Test Case Classを選択します。

enter image description here

関連

Xcode UI Test example