CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

testcontainers-integration-tests

Write integration tests using TestContainers for .NET with xUnit. Covers infrastructure testing with real databases, message queues, and caches in Docker containers instead of mocks.

Quality

68%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/testcontainers/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

53%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A technically dense, largely executable reference with genuinely useful modern-API (4.x) guidance, but its structure is broken in practice: both promised reference files are missing from the bundle, and the body carries redundancy (mock-vs-real teaching section, duplicated snippets, overlapping principle lists). An explicit ordered workflow would make adoption unambiguous.

Suggestions

Ship the referenced bundle files (database-patterns.md and infrastructure-patterns.md) or remove the links — as written, every reference to deeper content is a dead path, and the detail content those files promise has no home.

Delete the 'Problem with Mocking Infrastructure' mock example and its prose, deduplicate the PostgreSqlBuilder snippet, and merge Core Principles with Best Practices to remove the repeated isolation/cleanup/reuse items.

Add an explicit numbered adoption workflow (install packages → create module builder → wire IAsyncLifetime with a wait strategy → tag tests for the CI filter) with a readiness/validation checkpoint before first connection.

DimensionReasoningScore

Conciseness

The body is mostly efficient code-and-config, but includes unnecessary explanation and padding: a ~50-line 'Problem with Mocking Infrastructure' section teaching why mocks give false confidence (which Claude already knows), a duplicated PostgreSqlBuilder constructor snippet in two sections, heavy overlap between the 6-item Core Principles and 10-item Best Practices lists, and the same two reference-file links repeated three times. It does not reach the 2 anchor's 'several padded sections' threshold because most sections carry genuine non-obvious value (the 4.x API migration table, module packages, namespace guidance).

3 / 5

Actionability

Concrete, largely copy-paste-ready guidance: a complete IAsyncLifetime test class with setup/teardown, module-builder examples, the full NuGet ItemGroup, required usings, and a GitHub Actions workflow. Minor gaps keep it below 5: the CI example filters on '--filter Category=Integration' with no example of applying that category to tests, and the wait-strategy lambda shape (UntilInternalTcpPortIsAvailable(5432, w => w.WithTimeout(...))) is not shown working like the other examples.

4 / 5

Workflow Clarity

The adoption process (add packages → add usings → build container → wire IAsyncLifetime → run in CI) is never presented as an ordered sequence; it must be reconstructed from scattered sections. Container-readiness validation exists only as an isolated snippet under 'Common Issues' with no validate-then-fix loop. The IAsyncLifetime example does model a clear lifecycle, so this sits at the 3 anchor ('sequence present but checkpoints implicit') rather than 2.

3 / 5

Progressive Disclosure

References are clearly signaled — a dedicated 'Reference Files' section with per-file scope descriptions — but both referenced files, database-patterns.md and infrastructure-patterns.md, do not exist anywhere in the bundle, so the promised deeper content (migration testing, Respawn, multi-container networks) is unreachable. Meanwhile CI/CD configuration and troubleshooting content that belongs in those files is inlined in SKILL.md, matching the 2 anchor ('content that clearly belongs in separate files is inlined') with the added defect of broken navigation.

2 / 5

Total

12

/

20

Passed

Description

70%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A specific, well-scoped description with strong natural keywords and minimal conflict risk. Its main weakness is the absence of any explicit 'Use when...' trigger clause, which caps completeness and leaves invocation guidance implicit.

Suggestions

Append a 'Use when...' clause, e.g. "Use when writing integration tests for .NET data access, message queue, or caching code, when the user mentions Testcontainers, or when tests should run against real Docker-backed infrastructure instead of mocks."

Include concrete technology names users actually say (PostgreSQL, SQL Server, Redis, RabbitMQ) alongside the generic 'databases, message queues, and caches' categories to improve trigger-term coverage.

DimensionReasoningScore

Specificity

"Write integration tests using TestContainers for .NET with xUnit" is a concrete action, and the scope is enumerated with specifics ("real databases, message queues, and caches in Docker containers instead of mocks"). It lists fewer distinct action verbs than a 5-anchor example, but sits noticeably above the 3 anchor's '1-2 concrete actions, not comprehensive' because the enumerated infrastructure coverage fills the gaps.

4 / 5

Completeness

The 'what' is clearly and concretely answered, but there is no 'Use when...' clause or equivalent explicit trigger guidance — "instead of mocks" describes the approach rather than when to invoke the skill. Per the judging guidelines, a missing explicit when-clause caps completeness at 3.

3 / 5

Trigger Term Quality

Natural terms users would say are present: "integration tests", "TestContainers", ".NET", "xUnit", "Docker containers", "mocks", "databases". A few natural terms are missing — users often name specific technologies ("Postgres", "Redis", "SQL Server", "real database") rather than the generic categories used here, which keeps it below the 5 anchor.

4 / 5

Distinctiveness Conflict Risk

The combination "TestContainers for .NET with xUnit" plus "Docker containers instead of mocks" carves out a clear niche with distinct triggers, unlikely to collide with general testing or other language ecosystems' container-testing skills.

5 / 5

Total

16

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

relative_links

Relative link issues: 4 missing

Warning

Total

15

/

16

Passed

Repository

Aaronontheweb/dotnet-skills

Path

skills/testcontainers/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.