What problem does it solve? Contributors to openzeppelin-contracts must choose between four testing approaches (Hardhat unit tests, Foundry fuzzing, Halmos symbolic execution, Certora formal verification) and follow strict conventions for mocks, fixtures, and changesets. This Skill encodes those conventions so tests are written correctly the first time. ## Core Features & Use Cases - Approach selection: A decision table maps contract complexity (state machines, math-heavy code, invariants) to the right testing tool, from baseline Hardhat edge cases up to Certora rule-based verification. - hardhat-exposed and mock conventions: Explains auto-generated $-prefixed wrappers for internal functions and the five cases where manual mocks in contracts/mocks/ are warranted. - Concrete patterns: Covers loadFixture with named functions, shouldBehaveLike* shared behaviors, multi-target test loops, Chai assertion styles, Foundry fuzz and Halmos symbolic test naming, Certora local workflow, and the changeset rule. - Use Case: When fixing a bug in an ERC20 extension, use this Skill to add a minimal regression test with the correct fixture pattern, decide whether a Halmos symbolic test is warranted, and generate the required changeset. ## Quick Start Write a Hardhat test for the ERC20 _mint function following the openzeppelin-contracts testing conventions, including a fixture and a changeset.