<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[优质同款]]></title> 
<atom:link href="https://aatk.cn/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[万千人生，总有相似。]]></description>
<link>https://aatk.cn/</link>
<language>zh-cn</language>

<item>
    <title>断言反证法</title>
    <link>https://aatk.cn/?post=7</link>
    <description><![CDATA[<p>断言反证法（让断言真的会咬人）<br />
何时用</p>
<ul>
<li>写/改守护类断言：「文档 == 实现」「A 与 B 必须一致」「配置里不得出现 X」；</li>
<li>写阴性断言：「某方法没有被调用」「某事不会发生」「列表为空」；</li>
<li>审查已有测试，怀疑它「永远绿」；</li>
<li>重构后要确认原有断言仍然咬合（重构常常悄悄让断言失效）。<br />
核心判据一句话：「改完之后是绿的」不算验证；「改坏了它会红」才算。<br />
标准流程
<ol>
<li>先写断言，再故意破坏被测行为，确认断言失败；
<ul>
<li>代码路径可关掉：把分支改成 if False: ...（临时）；</li>
<li>参数可加坏：给协议串加上被禁止的那一项、把返回值的字段改名；</li>
<li>只能拿到新版本时：git show HEAD:<path> &gt; /tmp/before.ext，用断言的同一套取值/切片逻辑<br />
对旧版本求值，期望「不在/不满足」。</li>
</ul></li>
<li>读失败输出本身，确认报错指向你预期的差异（红得对地方，而不是别的错误）；</li>
<li>还原临时改动；</li>
<li>用 git diff --stat / git diff &lt;该文件&gt; 确认临时改动已彻底还原（尤其是 print 探针）；</li>
<li>再跑一次完整套件，确认绿。<br />
临时破坏不落库：不要把它写进 commit。若破坏方式本身值得留档，写在测试 docstring 里<br />
（例：「本用例的反证已跑过：把 X 改成 if False，本用例确实失败」）。<br />
恒真断言的三种成因（症状相同：永远绿）<br />
① 切片 / 字段名写错<br />
从大文本里取一段来断言时，切片锚点写错 → 断言恒真。</li>
</ol></li>
<li>对策：切片取窄（明确起止章节），且章节找不到时必须显式失败，不要静默跳过；</li>
<li>文件整体缺失可 skip，章节缺失必须 fail。<br />
② 空集合 / 空循环<br />
「遍历某集合、逐个断言每个元素满足 P」——集合为空时循环体一次不执行、断言恒真。</li>
<li>对策：显式断言基数 assert len(xs) &gt; 0（或 assert xs）；</li>
<li>典型先例：框架升级后 app.routes 被包了一层包装对象（如 FastAPI 的 _IncludedRouter），<br />
不递归取真实路由就会枚举到 0 条，闸门用例差点静默通过。<br />
③ 断言挂错对象（最隐蔽）<br />
断言「某方法没被调用」时打了钩子（spy），但补丁打在了错误的类/对象上 → 钩子永不触发<br />
→ 记录恒空 → 断言恒真。</li>
<li>先例：patch(FastAPI 的 UploadFile, &quot;read&quot;, spy)，而路由实参实测是<br />
starlette.datastructures.UploadFile（两者各自都定义了 read，不是同一层）→ spy 从未触发。</li>
<li>对策：<br />
a. 先实测对象身份：print(type(obj).<strong>mro</strong>)、print(type(obj).method.<strong>qualname</strong>)；<br />
b. 打补丁打到实例真正的类上（不是名字相近的那个）；<br />
c. 阳性对照：断言 spy 在「应该被调用」的路径上确实被调用（同一条用例里加一次正常路径），<br />
使「记录为空」不再可能由「补丁无效」造成。<br />
附加：子串断言 → 恒真<br />
assert &quot;a 'b'&quot; in s 会被 &quot;a 'b' 'bad'&quot; 满足 → 要「不得出现 bad」的规则根本守不住。</li>
<li>对策：断言整条指令/整段取值相等（先按分隔符切出那一项，再 ==），而不是 in。<br />
实用配方</li>
<li>阴性断言（没被调用）最少要两条对照：坏路径「没调用」+ 好路径「调用了」；</li>
<li>精确断言优先于子串断言，尤其当被守护的是一份「不允许被加料的名单」（CSP 指令、<br />
请求头清单、白名单）；</li>
<li>断言引用被守护的实现常量，别在测试里再抄一遍数字/字面量（否则常量改了测试仍绿）；</li>
<li>断言若依赖第三方文案（校验库的错误消息），在用例里注明「升级该库需同步改断言」。<br />
反模式</li>
<li>「跑了一遍是绿的」当作验证完成；</li>
<li>为了让测试通过而放宽断言（把 ==  改成 in、把精确值改成 startswith）——<br />
这是把守护拆掉换绿灯；</li>
<li>破坏性验证的临时改动留在工作区（下一个 commit 夹带 if False 或 print 探针）。<br />
与「真连接验证」的配合<br />
单元/进程内测试（如 ASGI TestClient）覆盖不到传输层差异：客户端总会带上某个头、<br />
body 总是一次性喂进去。凡断言涉及传输层行为（Content-Length 有无、chunked、流式读取、<br />
超时、代理头），都要另外做一次真连接验证（起一个独立端口的实例跑 curl/httpx，<br />
用完关掉，不要打断正在使用的那个实例）。</li>
</ul>]]></description>
    <pubDate>Mon, 21 Sep 2026 20:01:37 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=7</guid>
</item>
<item>
    <title>20260830 把自己喝醉</title>
    <link>https://aatk.cn/?post=6</link>
    <description><![CDATA[<p>据说，明天是暑假的最后一天，<br />
最后一天，很烦躁<br />
烦躁，于是喝酒<br />
喝酒，所以就把自己喝醉了<br />
喝醉，是因为我越来越忘记自己<br />
忘记自己，本心<br />
本心，在哪里？</p>
<p>这个世界，其实我不需要懂<br />
不需要懂，包括自己<br />
自己，有太多的对不起<br />
对不起，我心里的念念不忘<br />
念念不忘，如果你发现了<br />
发现了，你竟然看到这篇<br />
这篇，不知道是什么的东西</p>]]></description>
    <pubDate>Sun, 30 Aug 2026 21:59:50 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=6</guid>
</item>
<item>
    <title>20260828 黑白城市</title>
    <link>https://aatk.cn/yin-yang-city.html</link>
    <description><![CDATA[<p>我知道转过那道山岗，就可以<br />
看到旧时的村舍和炊烟<br />
也知道那些忙碌的人<br />
都不再是曾熟悉的</p>
<p>被游戏欺骗，一直以为<br />
一起探寻宝藏，面对成群的僵尸<br />
不会害怕，<br />
我们是彩色的</p>
<p>而他们说，你赢得一张车票<br />
去往那座城市<br />
体验极致的差异，也许真的<br />
会有安乐</p>
<p>翻过敞篷客车的栅栏，就可以忘记<br />
你是游客，可是你将永居<br />
只能看着，别人和别人交易<br />
你的车票，带着别人离开</p>]]></description>
    <pubDate>Fri, 28 Aug 2026 07:23:43 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/yin-yang-city.html</guid>
</item>
<item>
    <title>20260827 可以悲伤，不要悲哀</title>
    <link>https://aatk.cn/?post=4</link>
    <description><![CDATA[<p>小心拽着夏天的衣角<br />
浪迹于虫鸣<br />
秋天快来，秋天快来</p>
<p>纷繁的人流<br />
蒸笼，或者餐刀<br />
还有那些白蜡做的酒<br />
咕咚，咕咚<br />
绿色的泡沫</p>
<p>想做一个莽夫<br />
撕裂那个失语的孤独<br />
秋天要来，秋天要来</p>
<p>命运真的就在<br />
动荡和谎言，冷笑<br />
是倔强的呓语<br />
以及白眼或者焦虑<br />
我，是另一种命运</p>
<p>后记：<br />
在奔忙或者焦躁中期待，或许更适合静下来找到自己。可以悲苦，且把新酒。醒来记住最清的一句话是，如果你动他，我就弄死你。所以执着于守护的是什么？</p>]]></description>
    <pubDate>Thu, 27 Aug 2026 06:03:44 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=4</guid>
</item>
<item>
    <title>20260731 记梦</title>
    <link>https://aatk.cn/?post=3</link>
    <description><![CDATA[<p>唱着阳光色的歌，进那个铁黑的牢笼</p>
<p>不记得有没有酒，只能想起片断的梦</p>
<p>蓝天上的绵花糖，只在草地甜过</p>
<p>抓不住你的衣襟，它已托付给了阵风</p>
<p>醉了，笑了，痴了，呵着，冷着，忍着</p>
<p>谁说那样一朵白莲，偏爱念着烛影摇红</p>
<p>他们说世界尚有公平，而且正义尚存</p>
<p>可我亲眼看到人群踩破我的篱笆门</p>
<p>也许会有三五亲朋，坚持着要带我看日出</p>
<p>我擦干的泪眼却再也识别不出门禁</p>
<p>睡了三个小时，做了一个漫长的梦，就像经历了一部小说。在梦里装傻却不敢卖疯很久，被人发现愿意救“我”，等我到公堂上，却没有人替我辩护，因为所有想为我作证的人都被赶走或者带走。然后决定去敲鸣冤鼓，可是躲过一路暗杀后因为不到八点而被拒绝进入。到了八点又如何？签字、打卡、查预约，我的手机已经找不到扫码的入口。负责登记的人和排队的人群里就有人叫着我“召义，你还来这干啥？走吧”。我吓一跳，怎么会知道我的名字。他说我们也许只是音相同罢了。我说，那会如何？却没有回答了。醒来后好难过。也许是穿越短剧刷多了？</p>]]></description>
    <pubDate>Fri, 31 Jul 2026 05:52:25 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=3</guid>
</item>
<item>
    <title>学校业务系统功能需求</title>
    <link>https://aatk.cn/?post=2</link>
    <description><![CDATA[<p>[该文章已设置加密]</p>]]></description>
    <pubDate>Thu, 23 Jul 2026 15:56:36 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=2</guid>
</item>
<item>
    <title>NO.1 恐惧</title>
    <link>https://aatk.cn/?post=1</link>
    <description><![CDATA[<p>喝完酒回家，儿子在楼梯口看着那些夜里出来乱飞的昆虫很害怕。</p>
<p>我想起自己十多岁时有一年早上三四点钟去坐火车，经过街上路灯下时心里也是充满了恐惧。一只飞虫也许我可以轻松拿捏，但当成群的虫子飞舞还时不时撞到身上，扑棱着发出木木的声音时，就自然带来那种慌乱和恐惧。</p>
<p>可我现在已经是年近五十的老人，我厌恶这样的情形，却还是要帮助儿子走过这种无法抗拒的恐惧。</p>
<p>我嘴里说着，你看，它们不能怎么样我们。心里却还是非常地痛苦。</p>
<p>我不想让自己曾经的恐惧再次惊扰到儿子。所以我只能寄希望于儿子可以勇敢地跨过去。</p>
<p>有人说，70后和80后对孩子的爱有时是溺爱，其实只是在照顾小时候的自己。我没有溺爱孩子，却真的不想让孩子经历所有自己经历过的恐惧。</p>
<p>所以，我会怕，像怕这些其实伤害不了我的蛾子虫子一样，恐惧着很多东西。</p>
<p>我害怕曾经喜欢的美味因为我变老而成为毒药，害怕自己最爱的记忆时不时成为一把刀，害怕曾经的义无反顾偷偷成为慢性毒药，害怕经历的问心无愧会成为带血的伤口。</p>
<p>然而，恐惧终究是没有丝毫用处。而我不能有丝毫地停顿。</p>
<p>我得站在这样的虫子群里，忍受着内心不安，笑着鼓励儿子勇敢向前。</p>
<p>曾经我恐惧过恶梦，不想一次又一次地被扼住喉咙，摁住四肢，捂住眼睛，然后我学会了在夜里晚些睡，学会在醒来时悄悄擦去泪痕。</p>
<p>曾经我恐惧过死亡，现在我努力多教会儿子一些生活的技能和态度，我对他说等有一天我不在了，你可以好好地生活。</p>
<p>还有什么好恐惧的？除了活着。</p>
<p>必须活着，父母还在，儿子还小，总会有太多牵挂。</p>
<p>其实活着也许就是最勇敢的存在。愿意活着，经历那么的恐惧和伤痛，忍受那么多的不解和怨恨，遭受那么的不公和失败。还有什么可怕？还有什么懦弱？</p>
<p>所以，让恐惧见鬼去吧。我已经足够勇敢。</p>]]></description>
    <pubDate>Mon, 13 Jul 2026 23:16:30 +0800</pubDate>
    <dc:creator>Jason</dc:creator>
    <guid>https://aatk.cn/?post=1</guid>
</item>
</channel>
</rss>