SwiftでTestコード（on Xcode）

関数やクラスのtestをやらなきゃなー思って...
とりあえず、やり方だけ覚えとこう（実際やるかはまた別のお話w

# プロジェクト作成
`TestSample` というプロジェクトを作成します
作成時にこの2つにチェックを入れておきます
（チェックしてなくても後から足すこともできますが今回説明は割愛します。[こちら](http://qiita.com/s-harada_i-enter/items/f7d57966a5bf9d53038e)を参考に...）
![スクリーンショット 2017-05-17 17.57.23.png](https://qiita-image-store.s3.amazonaws.com/0/150615/b803b8e8-717a-554f-761a-d8fce1a429d0.png "スクリーンショット 2017-05-17 17.57.23.png")

# プロジェクト設定
プロジェクト設定を少し変更します
`Defines Module`を`YES`にします
![スクリーンショット 2017-05-17 18.47.00.png](https://qiita-image-store.s3.amazonaws.com/0/150615/137c650c-fd84-0e49-c9d8-72e4f43c36f7.png "スクリーンショット 2017-05-17 18.47.00.png")

# MainCode
メインのところにコードを書きます
今回は、簡単に新しい`MySample.swift`ファイルを作成して、クラスとaddメソッドを追加します

```MySample.swift
import Foundation
import UIKit

open class MySample {
	
	public func add(a: Int, b: Int) -> Int {
		return a + b
	}
	
}
```

引数を足すだけの簡単な関数ですw

`MySample.swift`の右側のチェックをつけておくことで、Test側でも参照できるようにしておきます
![スクリーンショット 2017-05-17 19.23.08.png](https://qiita-image-store.s3.amazonaws.com/0/150615/154e04a3-cc0c-a567-d932-0d3a536c533a.png "スクリーンショット 2017-05-17 19.23.08.png")



# TestCode
先ほど作ったaddメソッドをtestします
最初にチェックしておいたことで`[プロジェクト名]Test`フォルダができていると思います
`[プロジェクト名]Test.swift`を開くとすでにコードが書いてあります
`@testable import [プロジェクト名]`で先ほどメインに書いたクラスを参照できます

```[プロジェクト名]Test.swift
import XCTest
@testable import TestSample

class TestSampleTests: XCTestCase {
    
    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }
    
    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }
    
    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
		
    }
    
    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }
}	
```

## testしたいメソッドの追加
`test`から始まるメソッドを追加します
（`test`から始めるメソッド名にすることで、testと認識してくれます）

```[プロジェクト名]Test.swift
import XCTest
@testable import TestSample

class TestSampleTests: XCTestCase {
    // 省略
    func testMySample() {
		let mySample = MySample()
		let add = mySample.add(a: 2, b: 3)
		// addメソッドの返り値が5であるかの判断
		XCTAssertEqual(add, 5)
	}
}

```

# テストの実行
`command + U`で実行できます
左から5番目の場所に表示されます
実行して成功したものには、緑のマークがつきます
実行して失敗したものには、赤のマークがつきます
![スクリーンショット 2017-05-17 19.30.13.png](https://qiita-image-store.s3.amazonaws.com/0/150615/2330c007-9198-a00f-45fa-9420635f97b8.png "スクリーンショット 2017-05-17 19.30.13.png")

## 個別実行
testをメソッドごとに個別に実行したい場合、そのメソッドにマウスを合わせると実行マークに変わるので選択すると実行できます
![スクリーンショット 2017-05-17 19.28.03.png](https://qiita-image-store.s3.amazonaws.com/0/150615/eb4f403c-9361-5ef9-da17-e00201ccffb3.png "スクリーンショット 2017-05-17 19.28.03.png")


## 成功と失敗
先ほど書いたコードの`XCTAssertEqual`で成功か失敗かを判断します
なので、わざと失敗させてみたいと思います

```[プロジェクト名]Test.swift
import XCTest
@testable import TestSample

class TestSampleTests: XCTestCase {
    // 省略
    func testMySample() {
		let mySample = MySample()
		let add = mySample.add(a: 2, b: 3)
		XCTAssertEqual(add, 4)
	}
}

```

`2 + 3`が`4`になるとしてみますw
![スクリーンショット 2017-05-17 19.33.04.png](https://qiita-image-store.s3.amazonaws.com/0/150615/b17214f7-e120-2cd9-a4c4-70dd26ce6eea.png "スクリーンショット 2017-05-17 19.33.04.png")
（もちろん失敗しますw）

（`XCTAssert`の他のメソッドは[こちら](http://qiita.com/shirochan/items/10271912289dc563cc36)を参考に...）