Swift &引用;“快速测试”;以“失败”;可执行文件;但不是",;图书馆;?
我正在Mac上用Swift开发一些服务器端代码,但最终要在Linux上部署。我已经使用Swift软件包管理器创建了我的项目结构。我已经为类创建了几个XCTestCase单元测试。然而,我注意到,如果我将目标产品设置为Swift &引用;“快速测试”;以“失败”;可执行文件;但不是",;图书馆;?,swift,xctest,swift-package-manager,Swift,Xctest,Swift Package Manager,我正在Mac上用Swift开发一些服务器端代码,但最终要在Linux上部署。我已经使用Swift软件包管理器创建了我的项目结构。我已经为类创建了几个XCTestCase单元测试。然而,我注意到,如果我将目标产品设置为.executable,当我运行swift test时,我得到的输出类似于: 编译Swift模块“MyProjUtilTests”(3个源代码)链接 ./.build/x86_64-apple-macosx10.10/debug/MyProjUtilPackageTests.xtes
.executable
,当我运行swift test
时,我得到的输出类似于:
编译Swift模块“MyProjUtilTests”(3个源代码)链接
./.build/x86_64-apple-macosx10.10/debug/MyProjUtilPackageTests.xtest/Contents/MacOS/MyProjUtilPackageTests
架构x86_64的未定义符号:“\uuuu T012MyProjUtil16PropertyListUtilCMa”,引用自: __T017MYPROJUTILITESS20PropertyListList16TestReadFromFileyyyf在PropertyListListTest.swift.o“\uuu T012MyProjUtil3FooCMa”中引用 发件人: __T017MYPROJUTILITEST03FOOC07TESTRUND0YYFSSYKXKFU_uu_u_u_u_ufootests.swift.o“uuu T012MyProjUtilAAVABycfC”,参考自: __T017MYPROJUTILTESTSAAC11 MyProjUtilTests.swift.o ld:未找到架构的符号 x86_64:0:错误:link命令失败,退出代码为1(使用 -v查看调用)错误:已终止(1):/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/swift-build-tool -f/Volumes/Untitled/SwiftDev/MyProj/MyProjUtil/.build/debug.yaml测试
但是,如果我将目标产品更改为
.library
,并运行swift test
,它将执行我的测试并在没有错误的情况下退出。这是Swift软件包管理器中的错误吗?为了在我的可执行产品中包含单元测试,我是否需要做其他事情?或者这是预期的行为?谁能解释一下我在这里看到了什么以及为什么?谢谢 是的,这是预期的行为
您可以在软件包中设置三个目标。swift
。“MyAppLibTests”、“MyAppLib”和“MyAppExec”
“MyAppLibTests”依赖于“MyAppLib”。“MyAppExec”也依赖于“MyAppLib”。“MyAppLib”取决于您可能具有的任何外部依赖性
您的目录结构可能如下所示:
+-- Package.swift
|
+-- Sources/
| |
| +-- MyAppLib/
| | ...files...
| |
| +-- MyAppLibExec/
| |
| +-- main.swift
|
+-- Tests/
|
+-- MyAppLibTests/
|
+-- MyTestCase.swift
然后在main.swift
中导入MyAppLib;导入基础,然后可能解析命令行参数和环境变量。将选项传递到库的主入口点。类似于MyAppMain().run(选项:parsedValue,选项2:parsedValue 2)
好处:要获取命令行参数,它们位于字符串数组中:commandline.arguments
。要获取环境变量,它们位于字符串到字符串的字典中:ProcessInfo.ProcessInfo.Environment[“SOME_ENV_VAR”]