agentsclimarketplace

Testing

Skill iceflower/agent-skills/testing

BDD-style test writing rules including unit testing patterns, integration testing with Testcontainers, contract testing for microservices (Pact, Spring Cloud Contract), E2E testing (Playwright, Cypress, visual regression), and performance testing strategies (k6, Gatling). Use when writing or modifying test code.From its SKILL.md

Install
npx -y skills add iceflower/agent-skills --skill testing

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

6.2 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it

BDD-Style Unit Test Rules

1. BDD Style Required

  • Always use BDD style (Describe - Context - It)
  • Use English naming for test blocks with Korean descriptions

2. Naming Conventions

BlockPatternExample
describe (class){ClassName} 클래스의AuthFacade 클래스의
describe (method){methodName}() 메서드는login() 메서드는
context~하면, ~이면유효한 토큰이 주어지면
it~한다, ~반환한다사용자 정보를 반환한다

3. Qualities of a Good Unit Test

Every test must satisfy all five criteria:

  • Accurate damage detection: Tests MUST fail when code is broken. A passing test must provide confidence that the code works correctly
  • Implementation-independent: Tests MUST still pass after refactoring internals. Test the public API behavior, not implementation details
  • Well-explained failure: Failure messages alone must be sufficient to identify the problem
  • Readable test code: Tests serve as documentation. Other developers must understand the intent immediately
  • Fast execution: Unit tests must complete quickly since they are run frequently

4. Test Behaviors, Not Functions

  • ❌ Do NOT mechanically create one test case per function
  • ✅ Write separate test cases for each behavior a function performs
  • A single function may exhibit different behaviors under different conditions — test each behavior individually
  • NEVER skip error scenarios — test invalid inputs, boundary values, and exception cases alongside happy paths

5. Test One Behavior at a Time

  • Testing multiple behaviors in a single test case makes failure diagnosis difficult
  • ❌ Bundling multiple behaviors into one test
  • ✅ Each test case verifies exactly one behavior independently
  • Test case names must clearly describe the specific behavior being verified

6. Test Through Public APIs

  • NEVER change private functions to public just for testing
  • Test private function behavior indirectly through the public API
  • Directly testing private functions couples tests to implementation — refactoring breaks tests even when behavior is unchanged
  • If code is too complex to test through its public API, consider splitting it into smaller units

7. Test Double Guidelines

Mock and Stub

  • Mocks and stubs simplify tests by replacing real dependencies, but risk coupling to implementation details
  • Tests using mocks/stubs may break during refactoring even when behavior is unchanged

Fake

  • Fakes are simplified implementations of real dependencies, providing more realistic tests than mocks/stubs
  • Fakes decouple tests from implementation details
  • Trade-off: fakes require their own maintenance

Selection Criteria

SituationRecommended
Isolating from external systems (DB, API)Fake or mock
Only need to control return valuesStub
Need to verify call count/args/orderMock
Real dependency is lightweight and side-effect-freeUse the real dependency

8. Shared Fixture Usage

  • State sharing (BeforeAll): Runs once before all test cases. Suitable for expensive dependencies, but shared mutable state between test cases can cause problems
  • Config sharing (BeforeEach): Runs before each test case. Guarantees isolation between test cases
  • Mutable state MUST be reset via BeforeEach — sharing mutable state between test cases causes flaky tests
  • Important setup values must be visible within each test case — hiding them in shared fixtures obscures test intent
  • Shared constants are acceptable, but critical input values must be explicit in each test case

9. Use Appropriate Assertion Matchers

  • Failure messages alone must be sufficient to diagnose the issue
  • ❌ Poor assertion: failure shows only Expected: true, But was: false — no context
  • ✅ Good assertion: failure clearly shows the difference between expected and actual values
  • For collection assertions where order doesn't matter, use flexible matchers like containsExactlyInAnyOrder
  • Leverage framework-provided matchers (e.g., AssertJ containsAtLeast, Jasmine arrayContaining)

10. Use Dependency Injection for Testability

  • Hard-coded dependencies can make testing impossible
  • Constructor injection allows replacing dependencies with fakes or mocks during tests
  • Dependency injection improves not only testability but also modularity and flexibility
  • Combine static factory methods with constructor injection to maintain both production convenience and testability

11. Anti-Patterns

  • Deploying Without Tests: Deploying to production without test coverage is risky. At minimum, test core business logic
  • Testing Implementation Details: Tests coupled to internal implementation break on refactoring. Write behavior-based tests
  • Inter-test Dependencies: Tests that depend on execution order create unstable test suites. Each test must be independent
  • Excessive Mocking: Mocking all dependencies diverges from real behavior. Supplement with integration tests
  • Magic Numbers: Using meaningless numbers/strings in test data. Use intention-revealing constants or factories
  • Ignoring Flaky Tests: Tolerating intermittently failing tests erodes overall test suite reliability. Fix or quarantine immediately

Additional References

Related Skills

  • For load testing with k6 and Gatling, see load-testing skill

What ships with it: 6 files

61.6 KB alongside SKILL.md, 2 of them executable

references/

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.