LoginSignup
1
0

More than 1 year has passed since last update.

LocalPackageのTestをmainのschemeで実行できるようにする

Last updated at Posted at 2021-10-12

TL;DR

  • LocalPackageのテストがmainのschemeのテストと一緒に実行できなくてハマった。
  • メインのschemeにTestTargetを追加したらできるようになった。

はじめに

SwiftPackageManagerが市民権を得てきたことや有名企業のマルチモジュール化に関する発表したことを機に、iOSアプリ開発でもマルチモジュール化の流れが来ている気がしています。
iOSアプリのプロジェクトをマルチモジュール化していくにあたり、機能ごとやレイヤーごとにPackageを分割していく方法を採用してみたのですが、LocalPackageのTestを実行するのにハマってしまいました。
単純な解決方法だったんですが、あんまりネットに情報がなくて個人的に困ったので投稿します。

※SwiftPackageManagerについては以下を参照下さい。

LocalPakageのTestTargetとはどこのことか

ProjectにLocalPackageを追加すると以下のようなディレクトリが追加されます。

↓MyLibraryという名前にした場合

MyLibrary
├── Package.swift
├── README.md
├── Sources
│   └── MyLibrary
│       └── MyLibrary.swift
└── Tests
    └── MyLibraryTests
        └── MyLibraryTests.swift

※LocalPackageの追加方法はこちらを参照下さい。

この時Test用のTargetもMyLibraryTestsとして追加されます。


    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages this package depends on.
        .target(
            name: "MyLibrary",
            dependencies: []),
        .testTarget(
            name: "MyLibraryTests",
            dependencies: ["MyLibrary"]),
    ]

今回実行したいTestはこのMyLibraryTestsに記載しているテスト達です。

LocalPackageのテストを個別に実施する。

上記のMyLibraryTestsのみを動かす場合はschemeをMyLibraryに変更すれば実行可能になります。

実行したいテストに対して▶️を押して実行しても良いですし、command+UでMyLibraryTestsのテストを全て実行することもできます。
一方で、schemeをMyLibraryにしている場合はそれ以外のテストは実行できません。
逆にschemeをメインのものに戻すと、今度はMyLibraryのテストが実行できなくなります。

 

この状態だと、例えばfastlane scanでテストを実行している時に、MyLibraryTestsのテストが実行されずにCIを通過してしまいます。

ということがあり困ったのでした。

LocalPackageのTestTargetをメインのschemeに追加して全TestTargetのテストを一度に実行できるようにする。

上記の問題を解決するには、タイトルの通りメインのschemeにTestTargetを追加する必要があります

どういうことかと言うと、以下のようにEditSchemeからMyLibraryのTestTargetを追加すると一緒にテストが実行可能になります。

名称未設定.png

名称未設定.png

名称未設定2.png

この作業をしないと追加したLocalPackageのテストをメインのTargetのテストと一緒に実行できないのでした。

単純なことでしたが結構ハマってしまったので同じようにハマっている人がいたこちらで解決できると嬉しいです。

[おまけ]testTarget達はxctestplanにまとめておくと便利

僕はxctestplanを使ってschemeに追加するtestTargetをまとめています。

名称未設定.png
名称未設定3.png

xctestplanにまとめておくことで、localizationを切り替えてregionごとにテストが実行できたりするみたいです。

まとめ

  • LocalPackageのUnitTestがcommand+Uで実行できなくてハマった。
  • メインのschemeにLocalPackageのTestTargetを追加したらできるようになった。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0