{"id":9,"date":"2026-03-13T22:42:47","date_gmt":"2026-03-13T22:42:47","guid":{"rendered":"https:\/\/harmonic-framework.com\/?page_id=9"},"modified":"2026-04-20T13:35:10","modified_gmt":"2026-04-20T18:35:10","slug":"boundary-driven-testing","status":"publish","type":"page","link":"https:\/\/harmonic-framework.com\/es\/methodologies\/boundary-driven-testing\/","title":{"rendered":"Boundary-Driven Testing"},"content":{"rendered":"<h1 class=\"wp-block-heading\">Boundary-Driven Testing<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:20px\">Testing difficulty is architectural evidence. When a component cannot be exercised in isolation, the problem is not the tests \u2014 it is the structure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">The Core Insight<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The test spiral \u2014 unit, integration, end-to-end, system, user acceptance \u2014 is not a testing methodology. <strong>It is an architectural map.<\/strong> Each ring corresponds to a level of architectural scope, and that scope is determined entirely by where boundaries have been placed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Get the boundaries right and the spiral populates itself: each tier has clear targets, predictable scope, and low maintenance overhead. Get them wrong and the spiral collapses \u2014 unit tests become integration tests in disguise, E2E tests become the only reliable safety net, and the entire suite grows expensive while providing diminishing confidence.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testing Is Not Separate from Design<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The conventional framing of testing as a discipline separate from design produces a particular kind of pain. Teams adopt frameworks, mandate coverage minimums, and write guidelines. The tests improve. The pain persists. A change to a business rule breaks seventeen tests, most of which are not about business rules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The reframe: a component designed around a coherent responsibility, with explicit inputs, explicit outputs, and dependencies passed rather than acquired, is <strong>inherently testable<\/strong>. No additional effort is required. The same structural choices that allow the component to change without cascading effects allow it to be tested without elaborate setup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test Profiles by Tier<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tier<\/th><th>VBD \/ EBD Role<\/th><th>Primary Test Level<\/th><th>What to Mock<\/th><\/tr><\/thead><tbody><tr><td>Execution<\/td><td>Engine \/ Flow<\/td><td>Unit<\/td><td>Resource Accessor below<\/td><\/tr><tr><td>External Boundary<\/td><td>Accessor \/ API Accessor<\/td><td>Unit (translation only)<\/td><td>Data source driver<\/td><\/tr><tr><td>Cross-cutting<\/td><td>Utility \/ Interaction<\/td><td>Unit<\/td><td>Nothing (pure) or external sink<\/td><\/tr><tr><td>Orchestration<\/td><td>Manager \/ Experience<\/td><td>Integration<\/td><td>Engines mocked, Accessors mocked<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The Three Integration Seams<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Integration tests verify the seams between roles \u2014 not individual components. Everything is still mocked at the external boundary. Real external systems don&#8217;t enter until E2E.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Manager \u2192 Engine<\/strong> \u2014 Does the Manager invoke the Engine with correct inputs? Does it handle every response state (success, domain failure, unexpected error)?<\/li>\n<li><strong>Engine \u2192 Resource Accessor<\/strong> \u2014 Does the Engine correctly use the Accessor&#8217;s contract? Does it handle all return states?<\/li>\n<li><strong>Manager \u2192 Resource Accessor<\/strong> \u2014 For reads that inform orchestration decisions or state persistence the Manager owns.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">In EBD, the equivalent seam is <strong>Experience \u2192 Flow<\/strong>: does the Experience pass correct shared state, handle Flow completion and skip signals, and advance the journey correctly?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mock Placement Is Architectural Evidence<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Where you place mocks tells you where your boundaries are. Where you are <em>forced<\/em> to place mocks tells you where your boundaries <em>should<\/em> be.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rule: <strong>mock at the role boundary, not inside the role.<\/strong> Each component role has one natural mock point \u2014 the interface at which it hands off to the next tier. Mock that interface and nothing else.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When a unit test requires mocking more than the single boundary below the component under test, something is wrong. Either the component has absorbed responsibilities that belong at a different tier, or its dependencies are implicit rather than injected, or an Accessor is missing. Mock proliferation is always a structural signal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scenarios Validate Architecture and Tests<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The same core scenarios that validate structural boundaries in VBD and EBD are the test scenarios that matter most. Not because coverage demands it, but because scenarios that validate structural boundaries naturally exercise the most load-bearing code paths, the most significant collaborations, and the most complete representations of what the system is actually for.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n\n<div class=\"wp-block-button is-style-outline is-style-outline--1\"><a class=\"wp-block-button__link\" href=\"\/es\/whitepapers\/\">Read the Full White Paper<\/a><\/div>\n\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Boundary-Driven Testing Testing difficulty is architectural evidence. When a component cannot be exercised in isolation, the problem is not the tests \u2014 it is the structure. The Core Insight The test spiral \u2014 unit, integration, end-to-end, system, user acceptance \u2014 is not a testing methodology. It is an architectural map. Each ring corresponds to a &#8230; <a title=\"Boundary-Driven Testing\" class=\"read-more\" href=\"https:\/\/harmonic-framework.com\/es\/methodologies\/boundary-driven-testing\/\" aria-label=\"Read more about Boundary-Driven Testing\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"parent":6,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"methodology":[],"class_list":["post-9","page","type-page","status-publish"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false,"post-thumbnail":false,"hf-card":false,"hf-hero":false},"uagb_author_info":{"display_name":"","author_link":"https:\/\/harmonic-framework.com\/es\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"Boundary-Driven Testing Testing difficulty is architectural evidence. When a component cannot be exercised in isolation, the problem is not the tests \u2014 it is the structure. The Core Insight The test spiral \u2014 unit, integration, end-to-end, system, user acceptance \u2014 is not a testing methodology. It is an architectural map. Each ring corresponds to a&hellip;","_links":{"self":[{"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/comments?post=9"}],"version-history":[{"count":7,"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":751,"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/pages\/9\/revisions\/751"}],"up":[{"embeddable":true,"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/pages\/6"}],"wp:attachment":[{"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/media?parent=9"}],"wp:term":[{"taxonomy":"methodology","embeddable":true,"href":"https:\/\/harmonic-framework.com\/es\/wp-json\/wp\/v2\/methodology?post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}