*

Swift(Xcode6-Beta2)でMagicalRecord関連の処理を含んだDAOクラスのユニットテスト(UnitTest:XCTestフレームワーク)を実装する時にハマった事

公開日: : 最終更新日:2014/07/08 Swift , , ,


スポンサードリンク



SwiftでMagicalRecord関連の処理を含んだDAOクラスを作成し、ユニットテスト(XCTestフレームワーク)を実装しようとした時
に4時間ぐらいハマったのでその時の対処を記載したエントリーです。全てが正しいかは不明です。

背景

利用しているXcodeはXcode6-Beta2です。
MagicalRecordはCocoaPodsを利用してインストールしました。

ViewController.swiftにはできるだけロジックを書きたくない(テスト容易性のため)ので、
MagicalRecordを利用したDB操作関連のコードをDAO(Data Access Object)にまとめ、
DAOのユニットテストを実装しようと思いました。

テストを実装するにあたって、XcodeにはDBUnitのようなプロダクトが存在しないので(あったらすみません・・・)
とりあえずテスト開始時点でDBを空の状態にするために
MagicalRecordをインメモリストア初期化しようと思い、setUp()メソッドを以下のようにしてみました。

するとMagicalRecordが解決できないとのコンパイルエラーが発生しました。
Use of unresolved identifier ‘MagicalRecord’

ここから数時間の戦いが始まりました。

Bridging-Header.hの確認

テストTARGETがBridging-Header.hを読み込んでないのではと思い確認すると、やはり読み込んでいませんでした。

[プロジェクトを選択]→[TARGETS]でテストTARGETを選択し
[Build Settings]の
Swift Compiler – Code Generation
[Objective-C Bridging Header]
に$(SRCROOT)/$(PROJECT)/MagicalRecordSample-Bridging-Header.hを追加しました。

上記対応でもまだ問題が解決しませんでした。

CocoaPodsのPodfile

次に目をつけたのがCocoaPodsのPodfileです。

以下のようにMagicalRecordをテストTARGETに指定していませんでしたので
テストTARGETにも設定しました。

変更前

変更後

設定後、再度「pod install」を実行するとインストール処理終了後に以下のメッセージが表示されました。
[!] The target MagicalRecordSampleTests [Debug] overrides the OTHER_CFLAGS build setting defined in Pods/Pods-MagicalRecordSampleTests.xcconfig'.
- Use the
$(inherited) flag, or
- Remove the build settings from the target.

[!] The target MagicalRecordSampleTests [Debug – Release] overrides the OTHER_CFLAGS build setting defined in Pods/Pods-MagicalRecordSampleTests.xcconfig’.
– Use the $(inherited) flag, or
– Remove the build settings from the target.

「Remove the build settings from the target」をしても以前と同じPodfileになるだけなので
「Use the $(inherited) flag」ってなんのこっちゃがな?、と思い悩みました。

OTHER_CFLAGS

OTHER_CFLAGSって何だ!?、と[Build Settings]とにらめっこをすること

[プロジェクトを選択]→[TARGETS]でテストTARGETを選択し
[Build Settings]の
Apple LLVM6.0 Custom Compiler Flags
Other C Flagsに以下の設定を追加しました。
$(inherited)

以上で、setUp()メソッド内で利用していたMagicalRecordの解決ができました。

テスト対象クラスがUnitTestから参照できない

よしよし、と思ったのもつかの間、DAOクラスがテストから参照できませんでした。

Swiftファイルの作成時にテストターゲットをチェックしていなかったことが原因でした。
スクリーンショット 2014-07-07 12.54.49

一度ファイルを削除して、作成しなおしたところ、参照できるようになりました。
もっとスマートな方法があるんでしょうが・・・

ありました。Swiftファイルを選択後に右クリックメニューの「Add Files to プロジェクト名…」をクリックすると
対象となるターゲットを変更することができます。

結構疲れました。


スポンサードリンク

Googleアドセンス

Googleアドセンス




関連記事

Xcode6の正式版がリリースされApp Storeからダウンロードしインストール可能になりました。

ついにSwiftが利用できるXcode6の正式版がリリースされました。 ブラウザからMac App

記事を読む

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第一回「Swiftの概要」 

Swiftの簡単な説明 アップルのiOS(iOS8以降)およびOS Xのためのプログラミング言語。

記事を読む

2014年の秋のAppleのプレスイベントとXcode6-beta-7のインストール方法

2014年の秋のAppleのプレスイベント いよいよAppleは、米国西海岸時間9月9日午前10時

記事を読む

Swift入門[公式リファレンスのチュートリアルのSteps2の後半]

「Swift入門」では、Steps2の前半まで説明させていただきました。 本エントリーでは、

記事を読む

Xcode6-Beta2でSwiftのユニットテスト(Unit Test)をXCTestフレームワークで試してみる。

タイトルの通りですが、Xcode6-Beta2でSwiftのユニットテスト(XCTestフレームワー

記事を読む

Xcode6-Beta3でSwiftでBDDを行うためにQuickを導入しようと思ったが、all-product-headers.yaml:4:13: error: Could not find closing ]!が発生する

そろそろQuickを利用しようと思いまたまたハマりました。というかハマり中です。 「Quick

記事を読む

Swift入門[公式リファレンスのチュートリアルのSteps2の前半]

「Swift」と「Xcode 6」を少しずつさわっていこうと思ってはいるのですが、「Xcode 6

記事を読む

iOS(Xcode6とSwift)におけるマルチスレッド処理の実装方法その1[NSThreadクラスの簡単な利用例]

前回はObjective-CにおけるNSThreadクラスの簡単な利用例を取り扱いましたが今回は、ほ

記事を読む

Xcode6(Swift)のデリゲートとプロトコルの使い方

Xcode(Objective-C)のデリゲートの使い方では利用言語がObjective-Cの時のデ

記事を読む

Xcode6とSwiftでイメージ(画像)やアニメーションを表示する方法

本エントリーでは、Xcode6(言語はSwift)を利用してイメージ(画像)やアニメーションを表示す

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。

個人では初となるiOSアプリをリリースいたしました。 何度もリジ

no image
Ruby on rails4系でBootstrapを利用するためのtips

MacでRuby on rails4系のBootstrapを利用しよう

no image
Java、Eclipse、JUnit関連のエントリーの移行のお知らせ

Java、Eclipse、JUnit関連のエントリーは http:/

iOS8開発者向けお勧め本紹介[詳細! Swift iPhoneアプリ開発 入門ノート Swift 1.1+Xcode 6.1+iOS 8.1対応]

iOS7開発者向けお勧め本紹介を以前に紹介させていただきまいたが、今回

Swift入門(Xcode6のXCTestフレームワークで学ぶ) 第二回「関数(メソッド)とクロージャーの利用方法」

前回はSwiftの概要をザックリと説明させていただきました。 今

→もっと見る

Optimization WordPress Plugins & Solutions by W3 EDGE
PAGE TOP ↑