*

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アドセンス




関連記事

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

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

記事を読む

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

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

記事を読む

Swift(Xcode6-Beta2)でStringのメソッド(stringByReplacingCharactersInRange:withString:)のコンパイルが通らない時の対処

SwiftでStringのメソッド stringByReplacingCharactersInRa

記事を読む

iOS(Xcode6とSwift)におけるマルチスレッド(非同期)処理の実装方法その2[GCD(Grand Central Dispatch)の利用]

「iOS(Xcode6とSwift)におけるマルチスレッド処理の実装方法その1」ではNSThread

記事を読む

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

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

記事を読む

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

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

記事を読む

Xcode6-Beta3でSwiftでBDDを行うためにQuickを導入し動作させる手順

Clone the repository Create a using Quick Pro

記事を読む

Xcode6(xcode_6_beta_7、Xcode 6 GM seed)のインストール方法

2014年9月22日追記 Xcode6の正式版がリリースされApp Storeからインストール可能

記事を読む

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

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

記事を読む

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

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

記事を読む

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 ↑