Testを大量に書く機会があったので、Xcode10でのテスト環境の構築についてメモ。Testについてまとめる。テストBundleを追加する。ディレクトリが新しく追加されるので、その中の“アプリケーション名+Tests.Swift”にテストコードを記述して行く。初期状態では、このようなテストコードが記述されてる。各テストケース(testExample1、testExample2、testPerformanceExample)の前に呼ばれるメソッドで、パラメータの初期化等に使う。各テストケース終了後に呼ばれる。メソッドが呼ばれる順番は以下のようになる。-setUp()-testExample1()-tearDown()-setUp()-testExample2()-tearDown()-setUp()-testPerformanceExample()-tearDown()各テストケースは、XCTestCaseのサブクラスの中で、メソッド名の頭を「test」にすると、テストケースとして自動で認識してくれる。Navigatorを開く。各メソッドまたはBundleの横に表示される実行ボタンを押せばテストが実行される。予想される値)実際の値と予想される値が同じ場合は、テストをパスのように、テストケースを追加して行く。https://developer.apple.com/documentation/xctest/defining_test_cases_and_test_methodshttps://qiita.com/sunstripe/items/8102e79b4b3c71ab3508非同期テストネットワーク系の通信テストや、通知系のテストの場合は、非同期でのユニットテストが必要になる。メソッドが呼ばれない場合は、エラーが呼ばれる。-fulfill()メソッドをコールして、待機状態から抜け出す。テストが失敗するため、非同期処理が継続して繰り返し実行させる場合、テストが終わったらその処理は必ず終了させる。使えば、メソッドの処理時間を計測できる。measureブロック内での処理を10回繰り返して、各処理にかかった時間を表示してくれる。以下は0から100までを表示する処理時間の計測。}}計測が終わると灰色のアイコンが表示させる。そのボタンを押すと、計測結果の詳細が表示させる。試してないが、DBの読み書き処理をテストする予定。メソッドテストテスト対象のクラスをインポートする際に、@testableを付ければpublicメソッドで無くてもアクセス可能。privateメソッドとして定義されてるメソッドにはアクセスできないので注意。coverage)の測定機能もサポートしている。Wikipediaによると、コード網羅率の主な計測手法は以下の5種類がある。ソースコードの各文がテストで実行されたかどうかで判断する。制御構造上の分岐でそれぞれの分岐方向がテストされたかどうかで判断する。分岐条件の各項で真と偽の両方がテストされたかどうかで判断する。対象コードの考えられる全ての経路についてテストで実行されたかどうかで判断する。存在する全ての関数呼び出しがテストで実行されたかどうかで判断する。網羅率を算出してくれる。Coverageにチェックを入れる。この状態でテストを走らせると、コードカバレッジがパーセンテージで表示される。https://help.apple.com/xcode/mac/10.1/index.html?localePath=en.lproj#/dev9e0e09978実機とシュミレータの切り分け加速度センサなど、シュミレータではテストを実行できない場合がある。その場合には、以下のソースコードを使ってテスト処理を分岐させる。アルゴリズムのテストの場合などは、ダミーデータを使って、予想通りの結果が返ってくるかをテストする。使って対象プロジェクトをコマンドラインからテストできる。xcodebuildで確認できる。CIでも同様に実行できる。CIの設定は、過去にまとめたので、そちらを参照してください。現時点でのテスト環境なので、継続的にアップデートして行こうと思います。