<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Testing | The .NET Blog</title><link>https://thedotnetblog.com/zh/tags/testing/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>zh</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 30 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/zh/tags/testing/index.xml" rel="self" type="application/rss+xml"/><item><title>Aspire 的 hermetic 端到端测试是更多团队应该采用的模式</title><link>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/hermetic-aspire-tests-why-this-pattern-matters/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/zh/news/emiliano-montesdeoca/hermetic-aspire-tests-why-this-pattern-matters/</guid><description>Azure Chaos Studio 的测试文章展示了一个非常实用的模式：基于 Aspire 的 hermetic、临时端到端环境，可以同时提升人类和 AI 辅助开发的可靠性。</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;本文为自动翻译。查看原文请&lt;a href="https://thedotnetblog.com/zh/news/emiliano-montesdeoca/hermetic-aspire-tests-why-this-pattern-matters/"&gt;点击这里&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;脆弱的端到端测试代价很高，而且这种代价并不总能在仪表板上直接看出来。&lt;/p&gt;
&lt;p&gt;它们不只是失败那么简单。它们会慢慢训练团队不再信任反馈循环。&lt;/p&gt;
&lt;p&gt;这就是为什么这篇关于 &lt;strong&gt;Azure Chaos Studio + Aspire&lt;/strong&gt; 的文章一开始就吸引了我。它不是那种光鲜的产品公告，而是一则非常扎实的工程故事，讲的是如何让端到端测试不再像是在和运气讨价还价。&lt;/p&gt;
&lt;p&gt;说实话，我认为更多团队都应该采用这个模式。&lt;/p&gt;
&lt;h2 id="核心思路很简单但收益非常大"&gt;核心思路很简单，但收益非常大&lt;/h2&gt;
&lt;p&gt;关键做法是给每个测试分配自己的 &lt;strong&gt;hermetic、临时环境&lt;/strong&gt;，包含真实服务、真实依赖，以及基于健康状态的明确启动。&lt;/p&gt;
&lt;p&gt;一句话读起来很自然，但在真实系统里要做到这一点难得多，尤其当云依赖、共享环境和分布式服务都参与进来时。&lt;/p&gt;
&lt;p&gt;原文把问题说得非常清楚：共享测试环境会带来 &amp;ldquo;&lt;strong&gt;cross-talk、flaky behavior，以及 &amp;lsquo;谁把 staging 搞坏了？&amp;rsquo; 之类的群聊消息&lt;/strong&gt;&amp;quot;，而这就是它的运营成本。&lt;/p&gt;
&lt;p&gt;这句话之所以好笑，是因为它太真实了。&lt;/p&gt;
&lt;p&gt;太多团队把这种交换当成了正常情况。我不认为他们应该这样。&lt;/p&gt;
&lt;h2 id="为什么这个模式不只是影响测试"&gt;为什么这个模式不只是影响测试&lt;/h2&gt;
&lt;p&gt;我最喜欢这篇文章的一点是，它并不只是说：&amp;ldquo;我们让测试更可靠了&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;它实际上在说更大的事情：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果你的分布式系统难以复现、难以隔离、也难以验证，那么整个工程循环都会变慢。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这影响的不只是 CI。&lt;/p&gt;
&lt;p&gt;它还会影响：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发者做 refactor 时有多自信&lt;/li&gt;
&lt;li&gt;regression 被诊断得有多快&lt;/li&gt;
&lt;li&gt;更大的架构变更能否安全尝试&lt;/li&gt;
&lt;li&gt;团队对自动化验证的信任程度&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;而在 2026 年，这也会影响 AI 辅助开发能变得多有用。&lt;/p&gt;
&lt;h2 id="文章里最重要的一句话"&gt;文章里最重要的一句话&lt;/h2&gt;
&lt;p&gt;文中有一句我觉得值得反复引用：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;Agent 不需要完美。它们需要可验证。&lt;/strong&gt;&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个 framing 很棒。&lt;/p&gt;
&lt;p&gt;人们花很多时间讨论 AI coding agent 是否足够可靠，能否帮上非平凡的工作。我认为更好的问题是：&lt;strong&gt;我们的系统是否足够可测试，能够正确评估这项工作&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;如果一个 agent 提出了有意义的 refactor，而你唯一的安全信号只是一堆脆弱、半随机、在共享环境里运行的端到端检查，那么问题不只在 agent 身上。&lt;/p&gt;
&lt;p&gt;问题在于你的验证模型。&lt;/p&gt;
&lt;p&gt;这个 Aspire 模式会大幅改善这一点。&lt;/p&gt;
&lt;h2 id="这个实现为什么特别好"&gt;这个实现为什么特别好&lt;/h2&gt;
&lt;p&gt;原文中的几个部分让它远不只是一个“我们改进了测试”的泛泛帖子。&lt;/p&gt;
&lt;h3 id="1-真实的服务图而不是假的-mock-戏剧"&gt;1. 真实的服务图，而不是假的 mock 戏剧&lt;/h3&gt;
&lt;p&gt;这些测试不是建立在一堆互不相干的 mock 上，假装它们是端到端验证。&lt;/p&gt;
&lt;p&gt;它们运行 &lt;strong&gt;真实二进制&lt;/strong&gt;，在可能的地方连接 emulator，并使用和本地开发相同的 application model。&lt;/p&gt;
&lt;p&gt;这很重要。&lt;/p&gt;
&lt;p&gt;因为一旦端到端测试变成 mock 对 mock 的戏剧，它们就不再能告诉你有关真实组合的可靠信息了。&lt;/p&gt;
&lt;h3 id="2-基于健康状态的启动而不是魔法式-sleep"&gt;2. 基于健康状态的启动，而不是魔法式 sleep&lt;/h3&gt;
&lt;p&gt;这一点比看起来更重要。&lt;/p&gt;
&lt;p&gt;文章明确指出，测试会用 &lt;code&gt;WaitForResourceHealthyAsync&lt;/code&gt; 等待真实 health，而不是依赖任意的时间猜测。&lt;/p&gt;
&lt;p&gt;差别非常大。&lt;/p&gt;
&lt;p&gt;一个说“睡 30 秒然后祈祷最好”的测试 suite，本质上是在记录不确定性。而等待真实 readiness 的 suite，则是在记录系统意图。&lt;/p&gt;
&lt;h3 id="3-同一个-model-同时驱动本地开发和测试"&gt;3. 同一个 model 同时驱动本地开发和测试&lt;/h3&gt;
&lt;p&gt;这一点我很喜欢，因为它和 Aspire 最强的那些故事非常契合。&lt;/p&gt;
&lt;p&gt;同一个 application model 驱动：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本地开发&lt;/li&gt;
&lt;li&gt;服务 wiring&lt;/li&gt;
&lt;li&gt;模拟的依赖&lt;/li&gt;
&lt;li&gt;health checks&lt;/li&gt;
&lt;li&gt;hermetic 测试编排&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这会减少 drift，而 drift 是最安静的信任杀手之一。&lt;/p&gt;
&lt;h2 id="这种-devex-投入常常被低估"&gt;这种 devex 投入常常被低估&lt;/h2&gt;
&lt;p&gt;我想让这篇文章比一条快速反应更长，原因之一就是我觉得这种工程改进经常被低估。&lt;/p&gt;
&lt;p&gt;它们不炫目。&lt;/p&gt;
&lt;p&gt;它们不像新 AI 功能那样适合演示。&lt;/p&gt;
&lt;p&gt;也不一定会产出一张能让高层兴奋的幻灯片。&lt;/p&gt;
&lt;p&gt;但随着时间推移，它们会创造出更有价值的东西：&lt;strong&gt;一个能够更快行动、却不会对质量自欺欺人的团队&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这很重要。&lt;/p&gt;
&lt;p&gt;文章说他们现在运行大约 &lt;strong&gt;90 个 hermetic 测试&lt;/strong&gt;，其中包括 zone outage、DNS failure 和 geo-replication failure 之类的场景。这不只是更好的 test hygiene，而是分布式平台更强的信任模型。&lt;/p&gt;
&lt;h2 id="如果我在运营一个分布式-net-系统我会从这里带走什么"&gt;如果我在运营一个分布式 .NET 系统，我会从这里带走什么&lt;/h2&gt;
&lt;p&gt;如果你今天在处理分布式服务、Aspire 和 CI/CD pipeline，我会立刻带走这些：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;不要再把共享环境里的 flaky behavior 当成正常现象&lt;/li&gt;
&lt;li&gt;尽可能转向 health-based startup gate&lt;/li&gt;
&lt;li&gt;把 AppHost 当成真正的 production-grade orchestration code&lt;/li&gt;
&lt;li&gt;构建能够验证服务组合、而不只是单个服务正确性的 end-to-end check&lt;/li&gt;
&lt;li&gt;如果你正在采用 AI 辅助开发，先投资于 &lt;strong&gt;checkability&lt;/strong&gt;，再去追求更广泛的自动化&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后这一点，我认为更多团队需要听到。&lt;/p&gt;
&lt;h2 id="我的看法"&gt;我的看法&lt;/h2&gt;
&lt;p&gt;这是这一批里最强的 Aspire 文章之一，因为它解决的是一个非常实际的问题。&lt;/p&gt;
&lt;p&gt;它不是想用抽象概念来打动你，而是展示如何让 end-to-end 测试在真实分布式系统里变得更确定、更有用、也更值得信赖。&lt;/p&gt;
&lt;p&gt;一旦你看到它和 agent 辅助开发之间的联系，这个模式就更有说服力了。&lt;/p&gt;
&lt;p&gt;如果你的 end-to-end 测试故事仍然依赖共享环境、隐藏的 setup 知识和一点祈祷，那么这篇文章真的很值得研究。&lt;/p&gt;
&lt;p&gt;原文：&lt;a href="https://devblogs.microsoft.com/aspire/hermetic-aspire-tests-chaos-studio/"&gt;How Azure Chaos Studio ships with hermetic Aspire end-to-end tests&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>