如何从命令行运行XCTest以获得快速应用程序?

Joh*_*ter 32 xctest swift

我想从命令行使用XCTest测试一些Swift示例,如果可能的话.

import XCTest

class LeapTest : XCTestCase {

    func testVanillaLeapYear() {
      let year = Year(calendarYear: 1996)
      XCTAssertTrue(year.isLeapYear);
    }
}
Run Code Online (Sandbox Code Playgroud)

我喜欢从命令行运行它.

我已经将Xcode设置为使用测试版中的开发人员工具:

sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer/
Run Code Online (Sandbox Code Playgroud)

如果我天真地尝试并运行它就像这样

$ xcrun swift LeapTest.swift
LeapTest.swift:1:8: error: cannot load underlying module for 'XCTest'
import XCTest
       ^
Run Code Online (Sandbox Code Playgroud)

有没有办法直接从CLI运行它?或者我是否必须创建Xcode项目?

cho*_*bin 46

我认为问题是你在主项目的目标成员资格下有你的test.swift文件.确保您的swift测试文件仅属于Test目标.

  • 所以它需要是一个Xcode*项目*,对吧?我试图像任何其他带有测试的CLI脚本一样运行它(例如python,ruby等) (2认同)

Ada*_*arp 12

我能够使用以下命令进行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
Run Code Online (Sandbox Code Playgroud)

然后你可以执行测试xctest:

xcrun xctest LeapTests
Run Code Online (Sandbox Code Playgroud)

并打破这些swiftc命令行选项:

  1. -F... 将XCTest.framework添加到框架搜索路径,使其能够从Swift导入
  2. -Xlinker -rpath ... 确保在加载时可以找到XCTest共享库
  3. 没有明确指定-lswiftCore,我发现xctest当它试图运行测试套件时会崩溃

希望有所帮助!

  • @Metaphox得到了一些工作!这是一个示例项目,让我知道这是否有帮助:https://github.com/sharplet/minimal-swift (3认同)