[Swift]XCTestでRealmSwiftのユニットテストを行う方法

Realmとは

最近流行りのデータベースでモバイルアプリに組み込むために開発されています。「レルム」と読みます。

言語もJava, Swift, Objective‑Cに対応しているためクロスプラットフォームで使用することが可能な点が特徴です。

また、使うのも容易でiOSのCoreDataのように難しい使い方はありません。

Realmの使い方などに関して詳しくは公式サイト

 

RealmSwiftのユニットテスト

単純にやろうとするとハマります。

エラーメッセージ

 対処法

Realmのオブジェクトは複数のtargetに含まれてはいけません。

Realmのオブジェクトを定義しているクラスはユニットテストのtargetから外す必要があります。

この問題の解決策は2つあります。

  1. Realmのオブジェクトをpublicにする
  2. Swift2から使用できる@testableを利用する

 

1. Realmのオブジェクトをpublicにする

Realmのオブジェクトのデータをtargetから外してpublicで宣言します。

サンプルコードのDogオブジェクトは次のようになります。

これで、 テストを行うことが出来ます。

 

デメリットはclassをpublicにしなければいけないことです。

テストを行うためにコードを編集することになります。

 

2. Swift2から使用できる@testableを利用する

Swift2からは@testableをつけてimportすることでinternalなプロパティ、メソッドにアクセスすることが出来ます。

設定としてテストするプロジェクトのbuild settingsのEnable TestabilityYESにしておく必要があります。

あとは@testable import MyAppのようにインポートします。

こちらのデメリットはSwift2でしか使えないところでしょうか。

 

参考サイト

http://stackoverflow.com/questions/32273954/unit-testing-swift-2-0-testable-import-and-scheme-targeting-issues/

http://stackoverflow.com/questions/31002886/class-are-being-linked-more-than-once-in-target

http://stackoverflow.com/questions/33750402/rlmobject-subclasses-with-the-same-name-cannot-be-included-twice-in-the-same-tar

http://qiita.com/akatsuki174/items/fed51543a5245ca3f81a

 

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

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

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">