25 lines
2.0 KiB
Markdown
25 lines
2.0 KiB
Markdown
# Show, Don't Tell — Using Examples with Coding Agents
|
|
|
|
Exercise repository for the learning hour "Show, Don't Tell — Using Examples with Coding Agents". The same two exercises ship in three language tracks: participants refactor multi-assert tests by showing their coding agent one refactored example instead of describing the change in words.
|
|
|
|
## Choose your track
|
|
|
|
All three tracks contain the identical exercises — same domain behaviour, same test scenarios, same numbers. Pick the track that matches your participants' stack:
|
|
|
|
| Track | Directory | Toolchain | Run the tests |
|
|
| --- | --- | --- | --- |
|
|
| C# | `csharp/` | .NET 10, NUnit | `dotnet test` |
|
|
| Java | `java/` | Java 21 (Temurin), Maven, JUnit 5, AssertJ | `mvn test` |
|
|
| Python | `python/` | Python 3.13, uv, pytest | `uv sync && uv run pytest` |
|
|
|
|
Toolchain versions are pinned per track in that directory's `mise.toml`. If you use [mise](https://mise.jdx.dev), run `mise install` inside the track directory you choose; otherwise install the toolchain yourself. Each track has its own `README.md` with details.
|
|
|
|
## How the exercise works
|
|
|
|
Every track starts in the same START state: **all tests are green, and the refactoring the participants should do has NOT been applied.**
|
|
|
|
- **Round 1 — OrderDomain**: six tests assert order totals and line values with scattered, duplicated assertions. The first test has already been refactored as the example, using a custom matcher (`OrderStateConstraint` in C#, `OrderStateAssertion` in Java, `order_state.py` in Python). Participants show that example to their agent and let it refactor the remaining five.
|
|
- **Round 2 — OrderBookDomain**: seven multi-step given/when/then tests that each walk an order through several lifecycle states. Participants use the same show-an-example approach to split them into focused tests.
|
|
|
|
The point of the learning hour: LLMs are pattern matchers — a concrete example communicates the intended refactor faster and more reliably than a verbal description.
|