有人知道如何为快速测试提供命令行参数吗?
我尝试过:
swift test "myDBName"
但是我遇到了意外的参数错误。
可能的参数列表为:
OVERVIEW: Build and run tests
USAGE: swift test [options]
OPTIONS:
--build-path Specify build/cache directory [default: ./.build]
--chdir, -C Change working directory before any other operation
--color Specify color mode (auto|always|never) [default: auto]
--configuration, -c Build with configuration (debug|release) [default: debug]
--enable-prefetching Enable prefetching in resolver
--list-tests, -l Lists test methods in specifier format
--parallel Run the tests in parallel.
--skip-build Skip building the test target
--specifier, -s Run a specific test class or method, Format: <test-module>.<test-case> or <test-module>.<test-case>/<test>
--verbose, -v Increase verbosity of informational output
-Xcc Pass flag through to all C compiler invocations
-Xlinker Pass flag through to all linker invocations
-Xswiftc Pass flag through to all Swift compiler invocations
--help Display available options
还有其他方法可以传递args吗? (环境变量等?)
答案 0 :(得分:6)
实际上,您可以使用环境来实现它。
具有以下内容的测试:
final class HelloTests: XCTestCase {
func testExample() {
XCTAssertEqual(String(cString: getenv("SOMETHING")), "else")
}
static var allTests = [
("testExample", testExample),
]
}
使用swift命令行将成功:
SOMETHING=else swift test
答案 1 :(得分:3)
(OP的问题中未明确提及,但是swift test
指的是Swift Package Manager的测试工具;下面的答案也是如此)
如果我们将测试工具{{1}的--help
和运行工具swift test
的运行进行比较,您可能会注意到前者的USAGE语法不允许将参数传递给测试工具包装的二进制文件,这是后者的功能:
swift run
如果我们访问源代码,其中$ swift test --help
OVERVIEW: Build and run tests
USAGE: swift test [options]
...
$ swift run --help
OVERVIEW: Build and run an executable product
USAGE: swift run [options] [executable [arguments ...]]
...
代表SwiftRunTool
binds the command line arguments,而ArgumentParser
for SwiftTestTool
does not则可以验证这一点。
如果您认为这可能是有用的功能,请查看Swift Package Manager at GitHub的支持页面,以获取有关如何提出新功能/错误修复的说明。
为了完整性(除了利用环境),可以根据条件使用条件编译标志,并且可能就足够了。
在通过命令行启动测试时,这没有提供实际值,但是您可以使用Swift编译器ArgumentParser
使用条件编译标志(true
/ false
)给Swift编译器swiftc
-D
标志。
例如,以下测试将通过:
import XCTest
#if USE_LOCALHOST
let server_ip = "127.0.0.1"
#else
let server_ip = "1.2.3.4"
#endif
final class HelloTests: XCTestCase {
func testExample() {
XCTAssertEqual(server_ip, "127.0.0.1")
}
static var allTests = [
("testExample", testExample),
]
}
如果使用以下方法启动了测试套件:
$ swift test -Xswiftc -DUSE_LOCALHOST
如果使用以下命令启动,则测试将失败:
$ swift test