はじめに
Mac環境の記事ですが、Windows環境も同じ手順になります。環境依存の部分は読み替えてお試しください。
目的
この記事を最後まで読むと、次のことができるようになります。
- テスト環境を準備する
- 単体テスト(Unit Test)を作成する
テストターケッド
ViewController.swift
import UIKit
class ViewController: UIViewController {
var subClass: SubClass!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.subClass = SubClass(viewController: self)
}
class SubClass {
private let viewController: ViewController
init(viewController: ViewController) {
self.viewController = viewController
}
func multiply(num1: Int, num2: Int) -> Int {
return num1 * num2
}
}
}
テストコード
swift_UnitTestTests.swift
import XCTest
@testable import swift_UnitTest
class swift_UnitTestTests: XCTestCase {
var viewController: ViewController!
override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
self.viewController = storyboard.instantiateInitialViewController() as? ViewController
}
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.
viewController.loadViewIfNeeded()
let subClass = viewController.subClass
let result = subClass?.multiply(num1: 7, num2: 28)
XCTAssertEqual(result, 196)
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
テスト結果
関連する記事
実行環境
環境 | Ver. |
---|---|
macOS Mojave | 10.14.6 |
Xcode | 10.3 |
ソースコード
実際に実装内容やソースコードを追いながら読むとより理解が深まるかと思います。是非ご活用ください。
テストシナリオ
-
ViewControllerにかけ算の結果を返すメソッドを作成する
-
かけ算の結果が正常であるか単体テストにて確認する
かけ算メソッドの実装
ViewController.swift
import UIKit
class ViewController: UIViewController {
var subClass: SubClass!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.subClass = SubClass(viewController: self)
}
class SubClass {
private let viewController: ViewController
init(viewController: ViewController) {
self.viewController = viewController
}
func multiply(num1: Int, num2: Int) -> Int {
return num1 * num2
}
}
}
テスト環境の準備
ファイル構成はこのようになります。
Unit Testsを事前に準備する場合
プロジェクトの作成時にInclude Unit Testsにチェックを入れて作成する
Unit Testsを後から準備する場合
File > New > **Target...**をクリックする
Testセクションの中のiOS Unit Testing Bundleを選択してNextをクリッックする
情報を入力してFinishをクリッックする
テストケースの作成
swift_UnitTestTests.swift
import XCTest
@testable import swift_UnitTest
class swift_UnitTestTests: XCTestCase {
var viewController: ViewController!
override func setUp() {
// Put setup code here. This method is called before the invocation of each test method in the class.
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
self.viewController = storyboard.instantiateInitialViewController() as? ViewController
}
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.
viewController.loadViewIfNeeded()
let subClass = viewController.subClass
let result = subClass?.multiply(num1: 7, num2: 28)
XCTAssertEqual(result, 196)
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}
テストの実施
単体でテストを実施する場合
行番号上の再生ボタンをクリックする
全体でテストを実施する場合
Product > Testをクリックする
気をつけるポイント
CocoaPodsでパッケージをインストールしている場合は、テスト環境でパッケージが読み込めずエラーとなる
PodfileのTargetにテスト環境を追加して更新する
例) パッケージ(Kanna)をインストールした場合
Podfile.rb
# Uncomment the next line to define a global platform for your project
platform :ios, '12.0'
target 'swift_UnitTest' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for swift_UnitTest
pod 'Kanna', '4.0.3'
end
target 'swift_UnitTestTests' do
inherit! :search_paths
# Pods for testing
pod 'Kanna', '4.0.3'
end
Command.sh
pod update