<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>属性测试 on PlumePHP</title><link>https://plumephp.com/tags/%E5%B1%9E%E6%80%A7%E6%B5%8B%E8%AF%95/</link><description>Recent content in 属性测试 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 28 Sep 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E5%B1%9E%E6%80%A7%E6%B5%8B%E8%AF%95/index.xml" rel="self" type="application/rss+xml"/><item><title>Scala 测试体系实战：ScalaTest、MUnit、Mock 与属性测试</title><link>https://plumephp.com/scala-testing-practice/</link><pubDate>Mon, 28 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/scala-testing-practice/</guid><description>&lt;h2 id="引言"&gt;引言&lt;/h2&gt;
&lt;p&gt;Scala 生态的测试工具多到让人挑花眼：ScalaTest、MUnit、Specs2、ScalaCheck、Mockito……但它们共同服务于同一套&lt;strong&gt;测试金字塔&lt;/strong&gt;——底层大量快速的单元测试，中层少量集成测试，顶层极少数端到端测试。本文按金字塔自底向上，讲透每个层次在 Scala 里的落地工具与写法。&lt;/p&gt;</description></item><item><title>属性测试实战：用不变式与自动生成让测试拥有无限边界</title><link>https://plumephp.com/property-based-testing/</link><pubDate>Sun, 27 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/property-based-testing/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;传统用例测试是在&amp;quot;回答几个已知的问题&amp;quot;，属性测试则是在&amp;quot;让机器自己生成成千上万个问题&amp;quot;。&lt;/strong&gt; 你只描述一段代码&amp;quot;必须永远满足的性质&amp;quot;（invariant），工具随机生成数据去攻击它——一旦发现违反性质的输入，自动缩小到最小反例交给你。测试的边界从此不再由你的想象力决定。&lt;/p&gt;</description></item></channel></rss>