brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
java-testingTesting standards using JUnit 5, AssertJ, Mockito, Cucumber, and Spring Boot integration tests for Java. Use when writing or reviewing Java test behavior, including parallel execution and BDD; defer Kotlin-only tests, virtual-thread test infrastructure, and coverage-report/tooling configuration.
Independent GitHub snapshot · Automated classification · Original documentation governs
[BE-TEST-01] Parameterized Tests for Equivalent Cases: Prefer @ParameterizedTest (@CsvSource, @MethodSource) when methods have multiple equivalent inputs or boundary permutations. Distinct scenarios may stay separate test methods. Reviewers must not demand parameterized rewrites without a behavioral gap.[BE-TEST-02] Ban on Brittle DB Mock String Matching: Do not use string-matching mocks for raw SQL queries. Test pure domain calculations directly, or use Testcontainers for database repository verification.[BE-TEST-03] Ban on Shallow Assertions: Never assert only assertThat(result).isNotNull() without inspecting domain fields, status codes, and invariants.[BE-TEST-04] Ban on Pass-Through Interface Mocks: Repositories and service handlers must test contract compliance and error mapping. Ban 1:1 pass-through mock echoing without contract assertions.[BE-TEST-05] Bug-First Regression Lock: Every PR fixing a bug ticket or with title fix(...) must introduce a test reproducing the defect prior to the fix.@Test, @BeforeEach, and @AfterEach. Avoid JUnit 4 classes.AssertJ (assertThat) over JUnit assertEquals — enhanced readability.MethodName_State_Result or @DisplayName("Check if X when Y").[BE-TEST-01]): Use @ParameterizedTest with @ValueSource, @CsvSource, or @MethodSource.[BE-TEST-04]): Use Mockito with @ExtendWith(MockitoExtension.class). Use @Mock, @Spy, and @InjectMocks. NEVER mock data-only Records.[BE-TEST-02]): Use Testcontainers with @Container for real databases (PostgreSQL/Redis) in integration tests (*IT.java).@DirtiesContext sparingly.[BE-TEST-03]): Chain assertions for clarity: assertThat(result).isNotNull().hasSize(2).contains("X").assertThatThrownBy(() -> ...) to verify specific Exception types and messages.[BE-TEST-01] Stylistic parameterized rewrites: Do not demand parameterized refactoring of passing tests without a behavioral gap.[BE-TEST-02] Brittle DB mock string matching: Do not match raw SQL strings in mocks; use Testcontainers.[BE-TEST-03] Shallow assertions: Never assert only assertThat(result).isNotNull() without domain inspection.[BE-TEST-04] Pass-through mock echoing: Ban 1:1 mock echoing without contract verification.[BE-TEST-05] Bug fix without reproduction test: Ban bug fixes without a regression test.assertThat(a).isEqualTo(b), not assertTrue(a == b).