返回顶部
s

swift-xctest

Swift 6 + XCTest testing patterns for macOS/iOS apps using SwiftData, EventKit, and SwiftUI

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
95
下载量
0
收藏
概述
安装方式
版本历史

swift-xctest

# Swift/XCTest Testing Skill Expert-level XCTest patterns for Swift 6 macOS/iOS applications. Specialized for SwiftData, EventKit, SwiftUI, and strict concurrency. ## When to Use Use this skill when: - Writing XCTest for Swift 6 applications - Testing SwiftData models with in-memory containers - Testing Swift 6 actors and `@MainActor` isolation - Testing EventKit integrations - Testing SwiftUI views and @Observable ViewModels - Writing performance tests for macOS apps ## Core Principles ### 1. SwiftData Testing Pattern ```swift import SwiftData import XCTest @MainActor final class ModelTests: XCTestCase { var container: ModelContainer! var context: ModelContext! override func setUp() async throws { try await super.setUp() // Use in-memory config for isolated tests let config = ModelConfiguration(isStoredInMemoryOnly: true) container = try ModelContainer(for: YourModel.self, configurations: config) context = container.mainContext } override func tearDown() async throws { container = nil context = nil try await super.tearDown() } } ``` ### 2. Swift 6 Actor Testing ```swift @MainActor final class ServiceTests: XCTestCase { var service: YourActor! override func setUp() async throws { try await super.setUp() service = YourActor() } func testActorMethod() async throws { // Actor-isolated tests work naturally with async let result = try await service.method() XCTAssertEqual(result, expected) } } ``` ### 3. Given-When-Then Pattern ```swift func testFeature() async throws { // Given: Set up initial state let task = service.createTask(title: "Test") // When: Perform action task.complete() // Then: Verify result XCTAssertTrue(task.isCompleted) } ``` ### 4. Test Organization ```swift @MainActor final class FeatureTests: XCTestCase { // MARK: - Properties // Test dependencies // MARK: - Setup & Teardown // setUp/tearDown methods // MARK: - Unit Tests // Isolated tests // MARK: - Integration Tests // Tests across components // MARK: - Edge Cases // Boundary and error conditions // MARK: - Performance Tests // Performance benchmarks } ``` ## Testing Guidelines ### SwiftData Models - Always use `ModelConfiguration(isStoredInMemoryOnly: true)` - Mark test classes with `@MainActor` - Use `try context.save()` after mutations - Verify state with `FetchDescriptor` and `#Predicate` ### Actors & Concurrency - Test classes interacting with actors should be `@MainActor` - Use `await` for all actor methods - Test isolation boundaries with `nonisolated` tests where appropriate ### SwiftData Services - Use in-memory mode: `YourService(inMemory: true)` - Test fetch, create, update, delete operations - Verify `FetchDescriptor` queries with predicates ### EventKit Mocking - Mock `EKEventStore` for isolated testing - Test permission handling scenarios - Verify `EKReminder` to model mapping ### SwiftUI Views - Use `@Testable import` to access internal types - Test `@Observable` ViewModel behavior - Test state transitions and side effects ## Best Practices 1. **Isolation**: Each test should be independent 2. **Async-Safety**: Use `async/await` for all async operations 3. **MainActor**: Mark SwiftData tests with `@MainActor` 4. **Performance**: Use `measure` blocks for critical paths 5. **Readability**: Use Given-When-Then comments 6. **Organization**: Group tests with `// MARK:` sections ## Performance Testing ```swift func testPerformance() async throws { measure { // Code to measure _ = service.process(data: largeDataSet) } } ``` ## Common Test Patterns ### Batch Query Testing ```swift func testBatchFetchEfficiency() async throws { let ids = (0..<100).map { "ID-\($0)" } let start = Date() let results = service.fetch(by: ids) let duration = Date().timeIntervalSince(start) XCTAssertEqual(results.count, 100) XCTAssertLessThan(duration, 0.5, "Batch fetch should be fast") } ``` ### Predicate Testing ```swift func testPredicateFiltering() async throws { let descriptor = FetchDescriptor<IdentityMap>( predicate: #Predicate { $0.isDirty == true } ) let results = try context.fetch(descriptor) XCTAssertEqual(results.count, expectedCount) } ``` ## Running Tests ```bash # Run all tests xcodebuild test -scheme YourApp -destination 'platform=macOS' # Run specific test xcodebuild test -scheme YourApp -destination 'platform=macOS' \ -only-testing:'YourAppTests/FeatureTests/testMethod' # Run with performance output xcodebuild test -scheme YourApp -destination 'platform=macOS' \ -resultBundlePath ~/TestResults.xcresult ```

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 swift-xctest-1776021901 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 swift-xctest-1776021901 技能

通过命令行安装

skillhub install swift-xctest-1776021901

下载 Zip 包

⬇ 下载 swift-xctest v1.0.0

文件大小: 2.54 KB | 发布时间: 2026-4-13 12:14

v1.0.0 最新 2026-4-13 12:14
Initial release of swift-xctest skill.

- Provides expert-level testing patterns for Swift 6 macOS/iOS apps using XCTest.
- Includes guidance for testing SwiftData, EventKit integrations, SwiftUI views, and actor-based concurrency.
- Offers core testing patterns, best practices, and code snippets for setup, isolation, and performance benchmarking.
- Documents recommended test organization and usage of in-memory models, mocking, and the Given-When-Then approach.
- Contains sample commands for running and measuring tests with xcodebuild.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部