<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tomas Rampas</title>
    <description>The latest articles on DEV Community by Tomas Rampas (@tomasrampas).</description>
    <link>https://dev.to/tomasrampas</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3648135%2F46c797f9-b29c-4814-b130-5967429e5d7d.jpeg</url>
      <title>DEV Community: Tomas Rampas</title>
      <link>https://dev.to/tomasrampas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tomasrampas"/>
    <language>en</language>
    <item>
      <title>Claude Agentic Framework: Turning Claude Code into a Real Engineering Team with Verdict Gates and Self-Scoring Loops</title>
      <dc:creator>Tomas Rampas</dc:creator>
      <pubDate>Sun, 19 Jul 2026 09:27:37 +0000</pubDate>
      <link>https://dev.to/tomasrampas/claude-agentic-framework-turning-claude-code-into-a-real-engineering-team-with-verdict-gates-and-16oc</link>
      <guid>https://dev.to/tomasrampas/claude-agentic-framework-turning-claude-code-into-a-real-engineering-team-with-verdict-gates-and-16oc</guid>
      <description>&lt;p&gt;I have been working on this &lt;a href="https://github.com/tomas-rampas/claude-agentic-framework" rel="noopener noreferrer"&gt;Agentic Framework&lt;/a&gt; for some time now, and I want to share where the Claude Agentic Framework stands today. It is a configuration layer that sits on top of Claude Code CLI and turns a single chat session into a disciplined team of 21 specialized agents. The agents do the work. Hooks enforce the quality. A consistency system keeps everything honest. Recent changes made the reviews much stronger and finally gave us a proper self-scoring loop for non-code work.&lt;br&gt;
This is not another prompt collection. It is real enforcement.&lt;/p&gt;
&lt;h2&gt;
  
  
  From Chatbot to Agent
&lt;/h2&gt;

&lt;p&gt;Most people still treat Claude like a chatbot. You ask a question, you get an answer, then you copy the code, run it, fix the errors yourself, and ask again. The model never sees the result of its own work.&lt;br&gt;
An agent works differently. You give it a goal. It plans, edits files, runs commands, reads the output, and keeps going until the outcome is finished or it hits a real decision point. Context is gathered by the agent itself. Memory lives in CLAUDE.md and memory files. Tools are full — filesystem, shell, git, MCP servers. Feedback loops exist. Guardrails are hard.&lt;br&gt;
The difference shows most clearly in context economics. A single long session fills the window with every file and log until early decisions fall out of memory. In the agentic setup the orchestrator stays lean. Heavy reading happens in disposable child windows that return only short summaries. During the last overhaul of this repository itself, the two review agents alone burned around 357k tokens inside their own windows. The coordinating session received two reports of roughly 1,500 tokens each.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjrqjswn2kk2hox9982e5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjrqjswn2kk2hox9982e5.jpg" alt="Chatbot vs. Agentic Frawork" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Architecture in Practice
&lt;/h2&gt;

&lt;p&gt;Everything starts from one objective. Routing (driven by CLAUDE.md rules, the /delegate command, and agent descriptions) sends the work to the right specialist. Skills and MCP servers support that specialist. When the specialist finishes, the code-review-gatekeeper looks at quality. Findings get fixed. Then the peer-review-critic runs an independent final review with a deliberately read-only toolset. A stop gate checks that a real review was recorded. Only then can the session end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffn0v7l1kwsmnc9rteqxy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffn0v7l1kwsmnc9rteqxy.jpg" alt="Pipeline" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The framework recently went through its own pipeline. A multi-agent audit found the gaps, ten commits fixed them, both review agents signed off, three CI jobs passed, and the stop gate enforced the final review live.&lt;/p&gt;
&lt;h2&gt;
  
  
  Stronger Reviews That Actually Block
&lt;/h2&gt;

&lt;p&gt;The biggest recent change is the verdict-aware peer-review stop gate. Before, the system only checked whether a review had happened. Now the peer-review-critic must emit a clear VERDICT: APPROVED or VERDICT: CHANGES_REQUIRED line. Recorder hooks log the decision. The stop gate refuses to let the session end if the verdict is not APPROVED. There is no quiet bypass.&lt;br&gt;
New and improved commands support this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/build runs an autonomous loop that builds exactly what the spec says and iterates with the spec-compliance-reviewer until it receives APPROVED (max three iterations).&lt;/li&gt;
&lt;li&gt;/review-spec performs a manual conformance check.&lt;/li&gt;
&lt;li&gt;/delegate now consumes specifications more cleanly and avoids earlier per-todo deadlocks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The enforcement finally feels mature. It is no longer “was there a review?” It is “what was the actual verdict and did the system respect it?”&lt;/p&gt;
&lt;h2&gt;
  
  
  Self-Scoring Loop for Specs, Plans and Documents
&lt;/h2&gt;

&lt;p&gt;Code already has the review gates. Everything else — specifications, architecture notes, project plans, proposals — used to rely on vague “make this better” instructions. The new self-scoring-loop skill changes that.&lt;br&gt;
The loop is simple and strict:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a rubric first (5–7 weighted criteria that sum to 100). The rubric stays fixed for the whole loop.&lt;/li&gt;
&lt;li&gt;Score the current version 0–100 against each criterion with a short justification.&lt;/li&gt;
&lt;li&gt;Name the one or two weakest criteria and explain exactly why points were lost.&lt;/li&gt;
&lt;li&gt;Rewrite only the weak parts. Keep what already scored well.&lt;/li&gt;
&lt;li&gt;Rescore. Stop if the score improves by less than 3 points, reaches 90+, or hits three iterations.&lt;/li&gt;
&lt;li&gt;Return the polished version together with the final scores and the trajectory (for example 68 → 81 → 87).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk68popwxto7z1l38k4xu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk68popwxto7z1l38k4xu.jpg" alt="Self-Scoring Loop" width="784" height="1168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Guardrails are deliberate. No mid-loop rubric changes. Scoring without a visible rubric is invalid. The skill is advisory and never replaces the peer-review gates for code.&lt;br&gt;
I use this myself before I present any non-code deliverable. The improvement is measurable and the stopping rules prevent endless churn.&lt;/p&gt;
&lt;h2&gt;
  
  
  Related Discipline in vouchfx
&lt;/h2&gt;

&lt;p&gt;The same mindset shows up in my other project, &lt;a href="https://vouchfx.io" rel="noopener noreferrer"&gt;vouchfx&lt;/a&gt;. There the “delegate runs” idea appears in a different form: declarative .e2e.yaml specs are compiled once into memory-safe C# delegates via Roslyn. Those delegates then execute against a full container topology orchestrated by .NET Aspire and Testcontainers. Verdicts are explicit (Pass, Fail, EnvironmentError, Inconclusive) and map cleanly into CI exit codes and reports. The self-scoring idea from the agentic framework and the strict delegate-based execution in vouchfx come from the same place — quality must be measurable and enforced, not hoped for.&lt;/p&gt;
&lt;h2&gt;
  
  
  Numbers and Getting Started
&lt;/h2&gt;

&lt;p&gt;Today the framework ships with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;21 specialized agents across seven categories and three model tiers&lt;/li&gt;
&lt;li&gt;4 registered hooks (one hard blocking gate)&lt;/li&gt;
&lt;li&gt;Several operational skills including the self-scoring-loop&lt;/li&gt;
&lt;li&gt;5 MCP servers&lt;/li&gt;
&lt;li&gt;A consistency validator that derives truth at runtime and fails the build on any drift
3 CI jobs that include a Windows leg&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Installation is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/tomas-rampas/claude-agentic-framework ~/.claude
pwsh &lt;span class="nt"&gt;-NoProfile&lt;/span&gt; &lt;span class="nt"&gt;-File&lt;/span&gt; ~/.claude/scripts/install.ps1
bash ~/.claude/scripts/validate-consistency.sh   &lt;span class="c"&gt;# expect RESULT: PASS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need Claude Code CLI, PowerShell 7+, bash, jq, and the usual Node/uv pieces for the MCP servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;I built this because I was tired of agents that sound confident and then quietly skip the hard parts. The combination of real stop gates, verdict recording, and a structured self-scoring loop for everything that has no test suite makes the system feel much closer to a real engineering team.&lt;br&gt;
The framework is open. The presentation that started this write-up lives in the repository under docs/team-presentation.md. The Medium post that covered the review and scoring changes is already public. Feedback, issues, and better rubrics are welcome.&lt;br&gt;
Agents write the code. Hooks make quality non-negotiable. The consistency system keeps the whole thing honest. That is the current state, and I plan to keep tightening it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>agents</category>
      <category>agenticai</category>
    </item>
    <item>
      <title>VouchFx: Write End-to-End Tests in YAML and Run Them Against Real Distributed Systems</title>
      <dc:creator>Tomas Rampas</dc:creator>
      <pubDate>Thu, 16 Jul 2026 12:06:40 +0000</pubDate>
      <link>https://dev.to/tomasrampas/vouchfx-write-end-to-end-tests-in-yaml-and-run-them-against-real-distributed-systems-1o60</link>
      <guid>https://dev.to/tomasrampas/vouchfx-write-end-to-end-tests-in-yaml-and-run-them-against-real-distributed-systems-1o60</guid>
      <description>&lt;p&gt;When I started working on distributed systems, one of the most painful parts was always end-to-end testing. You have services in different languages, they talk through REST, Kafka, databases, and webhooks, and you need to verify that a full business flow actually works. Most tools either force you to write everything in code or become very flaky in CI.&lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;VouchFx&lt;/strong&gt; — a declarative end-to-end testing platform that lets you describe tests in simple YAML, while still running them against real containers with proper orchestration.&lt;/p&gt;

&lt;h3&gt;
  
  
  How VouchFx works
&lt;/h3&gt;

&lt;p&gt;The idea is quite simple but powerful. You write a test in &lt;code&gt;.e2e.yaml&lt;/code&gt;. VouchFx validates it, compiles it to real C# code (only once), and then executes it against containers that are started and managed properly.&lt;/p&gt;

&lt;p&gt;Here’s the flow:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feau8f4eb03k7i4fqn9am.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feau8f4eb03k7i4fqn9am.jpg" alt="vouchfx flow" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This approach gives you several advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tests are written in readable YAML&lt;/li&gt;
&lt;li&gt;You get the full power of C# when you need it (via &lt;code&gt;script.csharp&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Real containers are used (not mocks)&lt;/li&gt;
&lt;li&gt;The tool works with any language on the service side&lt;/li&gt;
&lt;li&gt;Memory is handled safely and CI exit codes are meaningful&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A simple example
&lt;/h3&gt;

&lt;p&gt;Here’s what a basic test can look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;simple-order-flow&lt;/span&gt;
  &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;smoke&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mycompany/orders-api:latest&lt;/span&gt;
    &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres:16&lt;/span&gt;

&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;create-order&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http.rest&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;POST&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://{api}/orders&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;customerId"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;42&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amount"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;99.5&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;capture&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;orderId&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;$.id&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;verify-in-db&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-assert.postgres&lt;/span&gt;
    &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SELECT status FROM orders WHERE id = {orderId}&lt;/span&gt;
    &lt;span class="na"&gt;expected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CREATED"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You describe what should happen. VouchFx takes care of starting the containers, waiting for them to be healthy, running the steps with retries, and collecting clear results.&lt;/p&gt;

&lt;h3&gt;
  
  
  When YAML is not enough
&lt;/h3&gt;

&lt;p&gt;Most of the time, writing tests in declarative YAML is enough and actually very pleasant. However, sometimes a test scenario becomes really complex — for example when you need custom logic, loops, or advanced calculations.&lt;/p&gt;

&lt;p&gt;In those cases you can use &lt;strong&gt;C# scripts directly&lt;/strong&gt;. VouchFx supports the &lt;code&gt;script.csharp&lt;/code&gt; step type, where you can write C# code inline or even load external &lt;code&gt;.csx&lt;/code&gt; files. This gives you the full power of the C# language when you need it, while the framework still handles container orchestration, resilience, variable capturing, and reporting.&lt;/p&gt;

&lt;p&gt;So you don’t have to choose between simple YAML and full code — you can mix both approaches in the same test suite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I built it this way
&lt;/h3&gt;

&lt;p&gt;I wanted something that feels natural to write, but still reliable when it runs in CI. Many testing tools either become too complex or produce flaky results because they don’t handle infrastructure properly.&lt;/p&gt;

&lt;p&gt;With VouchFx you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear separation between &lt;strong&gt;Pass&lt;/strong&gt;, &lt;strong&gt;Fail&lt;/strong&gt;, &lt;strong&gt;Environment Error&lt;/strong&gt;, and &lt;strong&gt;Inconclusive&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Proper exit codes so your pipeline only breaks on real test failures&lt;/li&gt;
&lt;li&gt;Good reporting (terminal, HTML, JUnit)&lt;/li&gt;
&lt;li&gt;VSCode support with autocomplete and Test Explorer integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also works well in polyglot environments. Your services can be in Java, Python, Node.js, Go — VouchFx doesn’t care. It only cares about the seams between them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest comparison with other tools
&lt;/h3&gt;

&lt;p&gt;Here’s a comparison with some popular tools in this space. I tried to be honest about the strengths and weaknesses:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;VouchFx&lt;/th&gt;
&lt;th&gt;NBomber&lt;/th&gt;
&lt;th&gt;Testcontainers + xUnit&lt;/th&gt;
&lt;th&gt;Aspire.Hosting.Testing&lt;/th&gt;
&lt;th&gt;Reqnroll (SpecFlow)&lt;/th&gt;
&lt;th&gt;Karate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Main style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Declarative YAML&lt;/td&gt;
&lt;td&gt;C# code&lt;/td&gt;
&lt;td&gt;C# code&lt;/td&gt;
&lt;td&gt;C# code&lt;/td&gt;
&lt;td&gt;Gherkin + C#&lt;/td&gt;
&lt;td&gt;Declarative (DSL)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Polyglot support&lt;/strong&gt; (any service language)&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;.NET only&lt;/td&gt;
&lt;td&gt;.NET only&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Real container orchestration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in (Aspire + Testcontainers)&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CI integration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ready-to-use templates (GitHub + GitLab)&lt;/td&gt;
&lt;td&gt;You build it yourself&lt;/td&gt;
&lt;td&gt;You build it yourself&lt;/td&gt;
&lt;td&gt;You build it yourself&lt;/td&gt;
&lt;td&gt;You build it yourself&lt;/td&gt;
&lt;td&gt;You build it yourself&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exit code handling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clear (Fail / Env Error / Inconclusive)&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory safety &amp;amp; performance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Verified (collectible ALC)&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Depends on your code&lt;/td&gt;
&lt;td&gt;Depends on your code&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;JVM-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Provider SDK + Community hub&lt;/td&gt;
&lt;td&gt;Plugins&lt;/td&gt;
&lt;td&gt;Write your own&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Step definitions&lt;/td&gt;
&lt;td&gt;Custom steps (Java/Kotlin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Polyglot distributed systems&lt;/td&gt;
&lt;td&gt;Load &amp;amp; performance testing&lt;/td&gt;
&lt;td&gt;.NET teams using containers&lt;/td&gt;
&lt;td&gt;.NET Aspire projects&lt;/td&gt;
&lt;td&gt;BDD-style .NET teams&lt;/td&gt;
&lt;td&gt;Teams comfortable with JVM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Quick summary of VouchFx advantages:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong focus on &lt;strong&gt;polyglot&lt;/strong&gt; systems (your services don’t need to be .NET)&lt;/li&gt;
&lt;li&gt;Much better &lt;strong&gt;CI reliability&lt;/strong&gt; thanks to proper exit codes and ready templates&lt;/li&gt;
&lt;li&gt;Declarative YAML makes tests easier to read and maintain for complex flows&lt;/li&gt;
&lt;li&gt;Built-in support for both simple YAML and powerful C# scripts when needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other tools can be better if you are doing heavy load testing (NBomber), pure BDD (Reqnroll), or if you are already deep in the Java ecosystem (Karate).&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting started
&lt;/h3&gt;

&lt;p&gt;Installation is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--global&lt;/span&gt; vouchfx &lt;span class="nt"&gt;--prerelease&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vouchfx run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There are also ready-to-use GitHub Actions and GitLab CI templates if you don’t want to set everything up yourself.&lt;/p&gt;

&lt;p&gt;You can find the full documentation and examples here:&lt;br&gt;&lt;br&gt;
&lt;a href="https://tomas-rampas.github.io/vouchfx/" rel="noopener noreferrer"&gt;https://tomas-rampas.github.io/vouchfx/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Would love your feedback
&lt;/h3&gt;

&lt;p&gt;VouchFx is still relatively new. I’ve been using it on my own projects and I think it solves some real pain points, but I would really like to hear from other people who do integration and end-to-end testing regularly.&lt;/p&gt;

&lt;p&gt;If you work with distributed systems and have 30–60 minutes, I would appreciate it if you could try it on one of your flows (or just look at the samples) and tell me what you think — what feels good, what’s confusing, or what’s missing.&lt;/p&gt;

&lt;p&gt;No pressure at all. Honest feedback is very valuable at this stage.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://tomas-rampas.github.io/vouchfx/" rel="noopener noreferrer"&gt;https://tomas-rampas.github.io/vouchfx/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Samples: &lt;a href="https://tomas-rampas.github.io/vouchfx-samples/" rel="noopener noreferrer"&gt;https://tomas-rampas.github.io/vouchfx-samples/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>integrationtesting</category>
      <category>opensource</category>
      <category>automation</category>
      <category>vouchfx</category>
    </item>
    <item>
      <title>Integration testing</title>
      <dc:creator>Tomas Rampas</dc:creator>
      <pubDate>Thu, 16 Jul 2026 11:12:31 +0000</pubDate>
      <link>https://dev.to/tomasrampas/integration-testing-3nei</link>
      <guid>https://dev.to/tomasrampas/integration-testing-3nei</guid>
      <description></description>
    </item>
  </channel>
</rss>
