web-dev-qa-db-ja.com

コマンドラインからSwiftアプリケーションに対してXCTestを実行するにはどうすればよいですか?

可能な場合は、コマンドラインからXCTestを使用して、いくつかのSwiftの例を試してみます。

import XCTest

class LeapTest : XCTestCase {

    func testVanillaLeapYear() {
      let year = Year(calendarYear: 1996)
      XCTAssertTrue(year.isLeapYear);
    }
}

コマンドラインから実行したいです。

私はすでにベータ版の開発者ツールを使用するようにXcodeを設定しています。

Sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer/

単純に試して実行すると、次のようになります

$ xcrun Swift LeapTest.Swift
LeapTest.Swift:1:8: error: cannot load underlying module for 'XCTest'
import XCTest
       ^

CLIから直接実行する方法はありますか?または、Xcodeプロジェクトを作成する必要がありますか?

32

次のコマンドでXCTestCaseをコンパイルすることができました。

swiftc \
-F/Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks \
-Xlinker -rpath -Xlinker /Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks \
-lswiftCore LeapTest.Swift \
-o LeapTests

次に、xctestを使用してテストを実行できます。

xcrun xctest LeapTests

そして、これらのswiftcコマンドラインオプションを分解するには:

  1. -F...はXCTest.frameworkをフレームワーク検索パスに追加し、Swiftからインポートできるようにします
  2. -Xlinker -rpath ...は、ロード時にXCTest共有ライブラリが見つかるようにします
  3. -lswiftCoreを明示的に指定しないと、xctestがテストスイートを実行しようとしたときにクラッシュすることがわかりました

お役に立てば幸いです!

12
Adam Sharp

問題は、メインプロジェクトのターゲットメンバーシップの下にtest.Swiftファイルがあることだと思います。 Swiftテストファイルがテストターゲットのみに属していることを確認してください。

46
chourobin