Xcode では、ユニットテストのテンプレートも作ってくれます。
Swift Package として作ったテストの使い方を確認してみました。
Swift Package として作ったテストの使い方を確認してみました。
確認環境
Xcode12.0 で確認しました。Sponsor Link
目次
通常プロジェクトと Swift Package の違い
Xcode で Swift Package を作っても、Xcode のプロジェクトファイル(*.xcodeproj) は作ってくれません。
Xcode で Swift Package を開くには、生成された Package.swift を使って開く必要があります。
テストコード
生成された Swift Package には、最初からテストのテンプレートも含まれています。
テストテンプレート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import XCTest @testable import SwiftPackageForTest final class SwiftPackageForTestTests: XCTestCase { func testExample() { // This is an example of a functional test case. // Use XCTAssert and related functions to verify your tests produce the correct // results. XCTAssertEqual(SwiftPackageForTest().text, "Hello, World!") } static var allTests = [ ("testExample", testExample), ] } |
Swift Package の仕組みを使ったテスト実行
コマンドラインからの実行
テストを実行するためには、コマンドラインで以下のようにします。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
% cd (Package.swiftのディレクトリ) % swift test user@mac SwiftPackageForTest % swift test [6/6] Linking SwiftPackageForTestPackageTests Test Suite 'All tests' started at 2020-09-18 13:21:35.562 Test Suite 'SwiftPackageForTestPackageTests.xctest' started at 2020-09-18 13:21:35.562 Test Suite 'SwiftPackageForTestTests' started at 2020-09-18 13:21:35.562 Test Case '-[SwiftPackageForTestTests.SwiftPackageForTestTests testExample]' started. Test Case '-[SwiftPackageForTestTests.SwiftPackageForTestTests testExample]' passed (0.105 seconds). Test Suite 'SwiftPackageForTestTests' passed at 2020-09-18 13:21:35.668. Executed 1 test, with 0 failures (0 unexpected) in 0.105 (0.106) seconds Test Suite 'SwiftPackageForTestPackageTests.xctest' passed at 2020-09-18 13:21:35.668. Executed 1 test, with 0 failures (0 unexpected) in 0.105 (0.106) seconds Test Suite 'All tests' passed at 2020-09-18 13:21:35.668. Executed 1 test, with 0 failures (0 unexpected) in 0.105 (0.106) seconds user@mac SwiftPackageForTest % |
なお、この方法では、テストするアーキテクチャを指定することができません。
つまり、Xcode を動かしている Mac というアーキテクチャ上でのテストしか行えません。例えば、iOS 向けのライブラリには使えないと言うことです。
Xcode の仕組みを使ったテスト実行
Xcode 上からの実行
⌘+U で実行されます。これは、通常プロジェクトのユニットテスト実行と同じキー割り当てです。
Debug Area に結果が表示されます。
このときには、Xcode で選択しているターゲットアーキテクチャ上でのテストが行われます。
コマンドラインからの実行
以下のように、ターゲットを指定して実行することもできました。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
% cd (Package.swiftのディレクトリ) // % xcodebuild -scheme (scheme名) test -destination "(ターゲット名)" % xcodebuild -scheme SwiftPackageForTest test -destination "name=iPhone 8" Command line invocation: /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -scheme SwiftPackageForTest test -destination "name=iPhone 8" Resolve Package Graph Resolved source packages: SwiftPackageForTest: /Users/tyagishi/dev/github/SwiftPackageForTest note: Using new build system (Snip) Testing started 2020-09-18 13:36:45.678 xcodebuild[35162:1862779] IDETestOperationsObserverDebug: Writing diagnostic log for test session to: /Users/usr/Library/Developer/Xcode/DerivedData/SwiftPackageForTest-gqqrdehhmlfmnzhlajoktqmqqdyy/Logs/Test/Test-SwiftPackageForTest-2020.09.18_13-36-38-+0900.xcresult/Staging/1_Test/Diagnostics/SwiftPackageForTestTests-1B97EE33-657F-4D21-BC6C-723D467BD637/SwiftPackageForTestTests-8BC9CB2C-08C8-44E4-A20F-24EE963DBB73/Session-SwiftPackageForTestTests-2020-09-18_133645-vTfamV.log 2020-09-18 13:36:45.678 xcodebuild[35162:1862717] [MT] IDETestOperationsObserverDebug: (6EA1B20E-77CC-4241-8BB7-CBB95B064E8D) Beginning test session SwiftPackageForTestTests-6EA1B20E-77CC-4241-8BB7-CBB95B064E8D at 2020-09-18 13:36:45.679 with Xcode 12A7209 on target <DVTiPhoneSimulator: 0x7f8c1a6deac0> { SimDevice: iPhone 8 (F52AB5B8-7F92-47BE-B52F-1BD7BA1C1771, iOS 14.0, Shutdown) } (14.0 (18A372)) 2020-09-18 13:37:03.560 xcodebuild[35162:1862717] [MT] IDETestOperationsObserverDebug: (6EA1B20E-77CC-4241-8BB7-CBB95B064E8D) Finished requesting crash reports. Continuing with testing. Test Suite 'All tests' started at 2020-09-18 13:37:06.288 Test Suite 'SwiftPackageForTestTests.xctest' started at 2020-09-18 13:37:06.289 Test Suite 'SwiftPackageForTestTests' started at 2020-09-18 13:37:06.290 Test Case '-[SwiftPackageForTestTests.SwiftPackageForTestTests testExample]' started. Test Case '-[SwiftPackageForTestTests.SwiftPackageForTestTests testExample]' passed (0.003 seconds). Test Suite 'SwiftPackageForTestTests' passed at 2020-09-18 13:37:06.295. Executed 1 test, with 0 failures (0 unexpected) in 0.003 (0.005) seconds Test Suite 'SwiftPackageForTestTests.xctest' passed at 2020-09-18 13:37:06.296. Executed 1 test, with 0 failures (0 unexpected) in 0.003 (0.006) seconds Test Suite 'All tests' passed at 2020-09-18 13:37:06.296. Executed 1 test, with 0 failures (0 unexpected) in 0.003 (0.008) seconds 2020-09-18 13:37:06.566 xcodebuild[35162:1862717] [MT] IDETestOperationsObserverDebug: 20.893 elapsed -- Testing started completed. 2020-09-18 13:37:06.566 xcodebuild[35162:1862717] [MT] IDETestOperationsObserverDebug: 0.000 sec, +0.000 sec -- start 2020-09-18 13:37:06.566 xcodebuild[35162:1862717] [MT] IDETestOperationsObserverDebug: 20.893 sec, +20.893 sec -- end Test session results, code coverage, and logs: /Users/usr/Library/Developer/Xcode/DerivedData/SwiftPackageForTest-gqqrdehhmlfmnzhlajoktqmqqdyy/Logs/Test/Test-SwiftPackageForTest-2020.09.18_13-36-38-+0900.xcresult ** TEST SUCCEEDED ** |
この方法では、destination の箇所でターゲットのアーキテクチャを指定してテストすることができます。
まとめ:Swift Package のテスト実行方法
Swift Package のテスト実行方法を改めて説明してみました。
Swift Package のテスト方法
- (コマンドライン上) % swift test でテスト実行 // ターゲットアーキテクチャ指定できない
- (Xcode 上) ⌘+U でテスト実行
- (コマンドライン上) % xcodebuild -scheme (scheme名) test -destination “(ターゲット名)”
Swift Package の仕組みだけではなく、Xcode が用意している仕組みでしかテストできないケースもあるので、必要に応じて使い分ける必要がありそうです。
説明は以上です。
Sponsor Link