swift-testing-pro — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited swift-testing-pro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Write clear, fast tests with the Swift Testing framework. Prefer it over XCTest for new code.
Trigger: /swift-testing-pro.
@Test functions, not test-prefixed XCTestCase methods.#expect for soft assertions; #require to stop the test on failure.@Suite (struct/actor) — a fresh instance per test gives isolation.async/throws directly; no expectation-fulfillment dance.❌ XCTest
import XCTest
final class MathTests: XCTestCase {
func testAdd() { XCTAssertEqual(add(2, 3), 5) }
}✅ Swift Testing
import Testing
@Test func add() {
#expect(add(2, 3) == 5)
}#expect(x == y) records a failure but continues.try #require(value) unwraps/asserts and halts the test if it fails — use beforedereferencing.
✅
@Test func parsesUser() throws {
let user = try #require(User(json: sample)) // stop if nil
#expect(user.name == "Ada")
}@Suite struct CartTests {
let cart = Cart() // fresh per test — no shared state
@Test func startsEmpty() { #expect(cart.items.isEmpty) }
@Test func addsItem() {
cart.add(.sample)
#expect(cart.items.count == 1)
}
}Don't reuse mutable state across tests (no XCTest setUp shared singletons).
Replace copy-pasted near-identical tests with arguments:.
❌
@Test func evenTwo() { #expect(isEven(2)) }
@Test func evenFour() { #expect(isEven(4)) }✅
@Test(arguments: [2, 4, 100])
func even(_ n: Int) { #expect(isEven(n)) }Cross-product with multiple arguments: collections; use zip for paired inputs.
@Test func loadsFeed() async throws {
let feed = try await api.feed()
#expect(!feed.isEmpty)
}
@Test func throwsOnBadInput() {
#expect(throws: ParseError.self) {
try parse("")
}
}.tags(.network) to group/filter..enabled(if:) / .disabled("reason") to gate..timeLimit(.minutes(1)) for runaway protection..bug("JIRA-123") to link issues.@Test(.disabled("flaky on CI — FIX-42"))
func flakyThing() { ... }Prefer .disabled("reason") over commenting tests out — it stays visible and tracked.
XCTestCase for new tests.#expect before a force-unwrap that should be try #require.arguments: parameterized..disabled("reason").XCTestExpectation where plain async/await works.Per issue: file:line, rule, before/after. Flag missing coverage of error paths and edge cases.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.