Project Icon

swift-testing

Swift代码测试框架 简化开发流程

Swift Testing是一个开源测试框架,为Swift开发者提供直观的API和灵活的测试组织方式。该框架支持自定义测试行为、参数化测试和并发执行,同时具备跨平台兼容性。Swift Testing简化了测试流程,有助于提高代码质量,适用于不同规模的Swift项目开发。

Swift 测试

Swift Testing 是一个包含富有表现力和直观的 API 的软件包,让你可以轻松测试 Swift 代码。

功能概览

清晰、富有表现力的 API

Swift Testing 具有清晰而富有表现力的 API,使用宏构建,因此你可以用少量代码声明复杂的行为。#expect API 使用 Swift 表达式和运算符,并捕获评估的值,以便在测试失败时快速了解出错原因。

@Test func helloWorld() {
  let greeting = "Hello, world!"
  #expect(greeting == "Hello") // 预期失败:(greeting → "Hello, world!") == "Hello"
}

自定义测试行为

你可以使用代码中指定的特征来自定义测试或测试套件的行为。特征可以描述测试的运行时条件,比如测试应该在哪种设备上运行,或将测试限制在特定的操作系统版本。特征还可以通过为测试指定执行时间限制来帮助你有效地使用持续集成。

@Test(.enabled(if: AppFeatures.isCommentingEnabled))
func videoCommenting() async throws {
    let video = try #require(await videoLibrary.video(named: "A Beach"))
    #expect(video.comments.contains("So picturesque!"))
}

简单灵活的组织方式

Swift Testing 提供多种方式来组织你的测试。使用组和子组的层次结构来组织相关测试。应用标签来灵活地管理、编辑和运行整个测试套件中具有共同特征的测试,如针对特定设备或使用特定模块的测试。你还可以为测试提供描述性名称,以便一眼就知道它们在做什么。

@Test("检查视频元数据",
      .tags(.metadata))
func videoMetadata() {
    let video = Video(fileName: "By the Lake.mov")
    let expectedMetadata = Metadata(duration: .seconds(90))
    #expect(video.metadata == expectedMetadata)
}

可扩展的覆盖范围和执行

参数化测试帮助你对一系列值运行相同的测试,从而减少代码量。所有测试都与 Swift 并发无缝集成,默认并行运行。

@Test("视频中提到的大陆", arguments: [
    "A Beach",
    "By the Lake",
    "Camping in the Woods"
])
func mentionedContinents(videoName: String) async throws {
    let videoLibrary = try await VideoLibrary()
    let video = try #require(await videoLibrary.video(named: videoName))
    #expect(video.mentionedContinents.count <= 3)
}

跨平台支持

Swift Testing 适用于 Swift 支持的所有主要平台,包括 Apple 平台、Linux 和 Windows,因此在不同平台间切换时,你的测试行为可以更加一致。它作为开源项目开发,并在 Swift 论坛 上讨论,以便来自任何地方的最佳想法都能帮助塑造 Swift 测试的未来。

下表描述了 Swift Testing 当前对各种平台的支持水平:

平台CI 状态 (6.0)CI 状态 (main)支持状态
macOS构建状态构建状态已支持
iOS已支持
watchOS已支持
tvOS已支持
visionOS已支持
Ubuntu 22.04构建状态构建状态已支持
Windows构建状态已支持
Wasm实验性

与 XCTest 兼容

如果你已经使用 XCTest 编写了测试,你可以将它们与使用 Swift Testing 编写的新测试并排运行。这有助于你按照自己的节奏逐步迁移测试。

文档

[!重要] 该软件包正在积极持续开发中,需要最新的 6.0 开发快照 工具链。目前其内容和接口仍被视为实验性质,可能会发生变化。有关稳定版本发布计划的详细信息,请参阅此 论坛帖子

Swift Testing 的详细文档可以在 Swift Package Index 上找到。在那里,你可以深入研究全面的指南、教程和 API 参考,以充分利用这个软件包。要亲自尝试,请参阅 入门指南

本项目的其他文档资源可以在 Documentation/ 子目录的 README 中找到。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号