- Use ScalaTest with `AnyFunSpec` or `AnyFlatSpec` style; organise specs with `describe`/`it` blocks that read as natural sentences.
- Use `ScalaCheck` for property-based tests — generate random inputs with `forAll` to find edge cases that example-based tests miss.
- Test pure functions directly without mocks; reserve `mockito-scala` or `scalamock` for testing effectful dependencies at integration boundaries.
- Structure test files to mirror the source tree — `src/test/scala/com/example/FooSpec.scala` for `src/main/scala/com/example/Foo.scala`.
- Use `BeforeAndAfterEach` or `BeforeAndAfterAll` traits for resource setup/teardown rather than duplicating setup in each test.
- Use `ScalaCheck` `Gen` combinators (`Gen.listOf`, `Gen.choose`, `Gen.oneOf`) to build domain-specific generators for property tests.
- Use `EitherValues` and `OptionValues` mixins from ScalaTest to assert on `Either`/`Option` without unsafe `.get` calls.