16

私はユニットテストを使用したことがなく、その使用法は理解していますが、いつどのように使用するかはよくわかりません。

ユニットテストを使用する価値があるのはいつか、いくつかの例を挙げて知りたいと思います。

4

4 に答える 4

18

他の回答は、いつどのようにではなく、どのように回答するかを示しているので、回答も追加させてください。

いつ

保持する本番コードを作成するときはいつでも、ユニットテストを行う必要があります。これに関して私が見た中で最も役立つトレーニングは、次の 2 部構成のビデオ シリーズでした。

最初の 5 分ほどは単なるイントロなので、最後までスキップできます。

どのように

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

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

私は私のものを呼んでいMyProjectます。Project Navigator で MyProjectTests グループを開くと、Xcode によって MyProjectTest.swift という名前の単体テスト ファイルが既に作成されていることがわかります。

ここに画像の説明を入力

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

の命名パターンに従っていますtestMethodNameBeingTested_Senario_ExpectedBehavior。単体テスト名は「test」で始める必要があります。

私はこのようなことをします:

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 ファイルを追加していますMyClass

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

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

失敗することreturn 0を確認するには (単体テストの重要な部分) 、. 次に、テストを実行すると、次のように表示されます。sumMyClass

ここに画像の説明を入力

戻ってこれを修正してから、単体テストを追加できます。必要に応じて、さまざまなクラスの他の単体テスト ファイルを作成することもできます。Project Navigator で MyProjectTest グループを右クリックし、[New File] を選択してから、[Test Case Class] を選択します。

ここに画像の説明を入力

関連している

Xcode UI テストの例

于 2015-07-22T17:57:30.277 に答える
13

ほとんどの場合、単体テストを行う必要があり、単体テストを念頭に置いてコードを作成する必要があります。過激派は、コードを書く前でもテストを書きます(TDD-テスト駆動開発と呼ばれます)。

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

たとえば、配列は次のようになります:[1-3、5-9、12-50]。この例では、配列に3つの間隔があり、ご覧のとおり、それらは並べ替えられています。クラスを作成した後(私はこれをIntervalsArrayと呼びました)、テストを作成して、正しく機能し、将来コードに変更を加えても「壊れない」ことを確認する必要がありました。

テストの例(擬似コード)は次のとおりです。

テスト1:

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

テスト2:

- 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]

最後に、新しいアレイのあらゆる側面をカバーする15のテストのようなものがありました。

これは、Xcodeチュートリアルを使用した優れた単体テストです。

UIをテストするためのロジックテスト(単体テストよりも複雑)を作成することもできます。AppleのUIテスト方法であるUIAutomationについて少し読んでください。完璧ではありませんが、かなり良いです。これについての優れたチュートリアルがあります。

自分が優れたプログラマーであると考える場合は、コードの単体テストを作成する必要があります。

于 2012-12-14T19:51:16.557 に答える
3

維持しなければならないコードを書くときはいつでも単体テストを書いてください。つまり、何かをリファクタリングしたい場合は、コードを変更しますが、動作は維持します。これは、プロダクションコードのほとんどすべてのビットです。

「Hello、World」の反例は、破棄する予定のコードを気にしないことです。「スパイクソリューション」とは、問題にどのように取り組むかを理解することです。それを理解したら、それを捨ててやり直してください。今回だけ、あなたはテストから始めます。

TDDを「過激派」と呼ぶと、それは非合理的で非現実的に聞こえます。実際、TDDを学ぶと、時間とお金を節約できます。

TDDの動作例については、OCUnitを使用した単体テストの例を参照してください。

于 2012-12-17T01:39:50.197 に答える
1

自分のものではないクラスを持つアプリケーションを作成するときはいつでも。単体テストを追加して、それらのクラスをテストするのに適した時期です。

最も基本的なアプリを除くすべてのアプリには独自のクラスがあるため、ほとんどの場合、単体テストを行うことをお勧めします。

他のプログラマーが使用するライブラリ、または複数のプロジェクトで使用するライブラリを作成している場合、それらには常に単体テストが必要です。

単体テストは、状況が変化したときに多くの時間を節約します。たとえば、OS の新しいバージョンが登場した場合は、アプリをテストするよりも単体テストでテストする方がはるかに優れています。

于 2012-12-14T19:58:33.443 に答える