<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Applied Testing Strategies on MinimumCD Practice Guide</title><link>https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/</link><description>Recent content in Applied Testing Strategies on MinimumCD Practice Guide</description><generator>Hugo</generator><language>en</language><atom:link href="https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/index.xml" rel="self" type="application/rss+xml"/><item><title>Pre-Ship Checklist</title><link>https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/pre-ship-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/pre-ship-checklist/</guid><description>&lt;p&gt;Use this as a set of prompts for a quick self-audit, not a list of gates that must all pass. Items that don&amp;rsquo;t apply to a component can be ignored; items the list doesn&amp;rsquo;t mention but your component clearly needs should be added. Walk back to the &lt;a href="https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/patterns/"&gt;pattern&lt;/a&gt; or &lt;a href="https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/cross-cutting-concerns/"&gt;cross-cutting concern&lt;/a&gt; that needs attention for any item that prompts a &amp;ldquo;we should fix that.&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; The bulk of the suite is &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#sociable-unit-test"&gt;sociable unit tests&lt;/a&gt; that exercise how behaviors collaborate to deliver a domain operation. &lt;a href="https://beyond.minimumcd.org/docs/testing/test-types/unit/"&gt;Solitary unit tests&lt;/a&gt; are reserved for genuinely complex pure logic.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Tests are organized around domain operations, not around classes or methods. Test names read as something a stakeholder would recognize.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every public-interface contract (inbound and outbound) has a &lt;a href="https://beyond.minimumcd.org/docs/testing/test-types/contract/"&gt;contract test&lt;/a&gt; running in the &lt;a href="https://beyond.minimumcd.org/docs/reference/glossary/#pipeline"&gt;pipeline&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Classes are tested through their public methods only. No reflection, no test-only visibility relaxations, no asserting on private state.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every consumed &lt;a href="https://beyond.minimumcd.org/docs/reference/glossary/#external-dependency"&gt;external dependency&lt;/a&gt; is wrapped in a gateway the team owns; doubles are of the gateway, not of the third-party library.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every boundary adapter has an &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#adapter-integration-test"&gt;adapter integration test&lt;/a&gt; against the real dependency or a high-fidelity stand-in (testcontainer, WireMock with provider fixtures).&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; The bulk of testing runs &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#in-band-test"&gt;in-band&lt;/a&gt; in the pipeline and gates the build; &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#out-of-band-test"&gt;out-of-band&lt;/a&gt; checks against real systems run on a schedule and trigger review on failure, never a build break.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#test-double"&gt;test double&lt;/a&gt; has a corresponding non-deterministic check that exercises the real dependency on a schedule or post-deploy.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every documented failure mode has a negative test.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Every error response has a test that verifies the error envelope, status code, and any side effects (or absence thereof).&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Time, randomness, and the network are injected, not called directly. No &lt;code&gt;sleep&lt;/code&gt; in tests. Use bounded polling or a fake clock.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; All deterministic tests run pre-commit and in &lt;a href="https://beyond.minimumcd.org/docs/reference/glossary/#ci-continuous-integration"&gt;CI&lt;/a&gt; Stage 1, and fail the build on failure.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; All post-deploy integration checks run out of pipeline and trigger review on failure, never blocking a commit.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Pipeline gates map to defect sources from the &lt;a href="https://beyond.minimumcd.org/docs/reference/defect-sources/"&gt;Systemic Defect Fixes&lt;/a&gt; catalog. If a defect category has no automated check, that&amp;rsquo;s a known risk.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Authn and authz are tested across every protected endpoint, not as one-offs per feature.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Database migrations are tested forward, backward (where supported), and on representative data volume against the production engine.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Fixtures are generated from the schema or built through Object Mother / builder helpers, not inline literals.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Failure-path tests assert on observability (metric incremented, structured log emitted with correlation ID), not just the response.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Per-endpoint perf budgets exist for hot paths; load tests gate production promotion; &lt;a href="https://beyond.minimumcd.org/docs/testing/glossary/#soak-test"&gt;soak tests&lt;/a&gt; run out of pipeline.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Flaky tests are quarantined with a dated owner and time-boxed remediation. No permanent quarantine list.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; The deterministic suite respects the pattern&amp;rsquo;s time budget (under 5 to 8 minutes per component, under 10 minutes total).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Cross-Cutting Concerns</title><link>https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/cross-cutting-concerns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/cross-cutting-concerns/</guid><description>&lt;p&gt;The &lt;a href="https://beyond.minimumcd.org/docs/testing/applied-testing-strategies/patterns/"&gt;patterns&lt;/a&gt; describe testing organized by component shape. The concerns below cut across all patterns and deserve dedicated coverage in any non-trivial system.&lt;/p&gt;
&lt;h2 id="authn-and-authz-testing"&gt;Authn and authz testing&lt;/h2&gt;
&lt;p&gt;Authentication and authorization deserve dedicated, exhaustive coverage. They are a major source of high-impact incidents and the failure modes are predictable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tenant isolation&lt;/strong&gt;: tenant A&amp;rsquo;s queries never return tenant B&amp;rsquo;s data. Test every read path. Multi-tenant SaaS bugs are almost always missing isolation tests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope or role escalation&lt;/strong&gt;: a token with &lt;code&gt;read:orders&lt;/code&gt; cannot perform &lt;code&gt;write:orders&lt;/code&gt;. Test the matrix of scope and endpoint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expired tokens&lt;/strong&gt;: rejected even if cached locally. Clock-skew tolerance is a property of the verifier, not a license to skip the test.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Forged tokens&lt;/strong&gt;: signature validation actually validates. The classic JWT &lt;code&gt;alg: none&lt;/code&gt; bug still ships periodically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing auth&lt;/strong&gt;: every protected endpoint returns 401, never 500 (information leak) and never 200 (catastrophic).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Service-to-service auth&lt;/strong&gt;: machine identities respected, mTLS validated, token-swapping attacks detected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pattern: a parameterized test that takes (endpoint, method, expected-status-when-no-token, expected-status-when-wrong-scope) and runs across every endpoint in the OpenAPI or schema definition. New endpoints are covered automatically.&lt;/p&gt;</description></item></channel></rss>