From bea8aefd8dcceb6607d4531ddcd2e29eaabb96cd Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Fri, 16 Oct 2026 09:22:45 +0800 Subject: [PATCH] test: stop hardcoding an out-of-repo sys.path in test_protocol.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tests/test_protocol.py 原本把 "/home/program/NextAgent/src" 硬编码进 sys.path,指向宿主机上另一份(工作区为脏的)NextAgent 检出。结果测试 import 的是那份副本而非本仓库的 src,导致两个用例失败: - test_decode_raises_on_wrong_fmt_id → DecodingError not raised - test_register_and_send → ValueError: inhomogeneous shape 改为基于 __file__ 推导仓库内的 src/ 路径,测试不再依赖仓库外的任何 绝对路径,任何检出位置都能跑通。实现代码未做改动——这是测试耦合问题, 不是实现 bug。 同时取消跟踪 7 个误提交的 .pyc(.gitignore 规则此前加晚了)。 仅 git rm --cached,工作区文件保留;.gitignore 的 __pycache__/ 与 *.pyc 规则继续生效。 python3 -m unittest discover -s tests → Ran 31 tests, OK git ls-files '*.pyc' | wc -l → 0 --- .../__pycache__/__init__.cpython-312.pyc | Bin 225 -> 0 bytes .../__pycache__/rule_based.cpython-312.pyc | Bin 2825 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 449 -> 0 bytes src/protocol/__pycache__/codec.cpython-312.pyc | Bin 6901 -> 0 bytes .../__pycache__/registry.cpython-312.pyc | Bin 3994 -> 0 bytes .../__pycache__/tensor_bus.cpython-312.pyc | Bin 2319 -> 0 bytes tests/__pycache__/test_protocol.cpython-312.pyc | Bin 16514 -> 0 bytes tests/test_protocol.py | 4 +++- 8 files changed, 3 insertions(+), 1 deletion(-) delete mode 100644 src/parsers/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/parsers/__pycache__/rule_based.cpython-312.pyc delete mode 100644 src/protocol/__pycache__/__init__.cpython-312.pyc delete mode 100644 src/protocol/__pycache__/codec.cpython-312.pyc delete mode 100644 src/protocol/__pycache__/registry.cpython-312.pyc delete mode 100644 src/protocol/__pycache__/tensor_bus.cpython-312.pyc delete mode 100644 tests/__pycache__/test_protocol.cpython-312.pyc diff --git a/src/parsers/__pycache__/__init__.cpython-312.pyc b/src/parsers/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 12596d8ce0e885ab425ea2a4e34bdc3969f95289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmX@j%ge<81fpMMvfP36V-N=hn4pZ$VnD`ph7^Vr#vF!R#wbQch7_iB#weyrW=)ot zj6g|E##{VBr8%iiiN&cY0f|M$sYON1Kyg1!=387vK#BMykPKMt7JGbrVopwc{7Qz; zAPau!>u2QWrs@|I<);@V=IZ;UR+KoVr{g?xz|6?Vc$Y!_0k_NrF4;!*B6gr40Jf4jY5)KL diff --git a/src/parsers/__pycache__/rule_based.cpython-312.pyc b/src/parsers/__pycache__/rule_based.cpython-312.pyc deleted file mode 100644 index ff5b148accf76bc22a45d0fbc1dcdc5f4534f094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 zcmc&#TWk|o5Z$%c&p6~^LP!PF0n}m|;y@r#f}sL}fE2DA=`U=iZ&0c5Wy4Y~Hf1aqpf3&9a^>)tSl6K^R=ZXbHYa zLE%kGN5KS6NMQbVbTlCbF2K01(tyw4J?eRJ3jW(91cG(z~ zW_&jQICVWB2D?+&zfW8~FLp;vJNE7R?a`U3*x9L({?v~bO*^(fKk=1bZ-SN@ekgWc zOrPkPdNLqB3a2|d#ZzaKk4{X*ZYO&JCXWP4+9^|VU`QP5N#1!VUj7EaB;!Q*e&Xzq zcs?L6Cm&oxDw3Js>9&E4MrzyI40Ps2SSp zV_eOdcuT=SnNq?x^DBr;7>7Hgae3Yj_-{v`u=lWbC5Jh58HiaOr{I*?YHP&Iss;xAl5Y+OIW4It z9my-VYfZrdP&+yJ!P*b^_ z8vb}rCJT8I;zBCFUGt`BavCX`D!7Lllu?LXLA#bJhXm#*(%XLAbx!}dG}#j;td0+$X1CfS5w2^rBTVw!b3&kpP^5^b@zQrqPeu(G_Whfz*79pi2!zQX?bjn`ctP zU)Guuflje^L>#`KetcehaBbajW%;U>G>VK5Ig&VcT@3z&9+=L1z5=w+cQXlYW#1X?uZya;-v&1r9SwZTXr5HgEiWW;=OV~~#wBCX?#Ugxt{ zIkgCMST|4wBDT39{Pg^E zVOzJO&oa6)_z6O)4_hOj$JWMHjQV-wZr-pvgBLfJ{zu4@=Ca8C!38mV++5Su9QrU^ z+P%EX9XlG_g8bP6e7lJ^R`7<3tS5yJt&3L03V7pM-msQ2 zLf{+BdO=H)D1js?=t;88O`$i56bvMJ)Ms;Mb~GeOxtn2G;qpK|P&S6K`2{8GWtc*g zXsOyzwr^k(uAF{U_zV)Lj9Dv)0QS3rP-&+PYE^Y;fJ;xn~G#qXG6RpU=2oAm4E?=9+&%ir_2?g-Tdfm-#XE{T++QBEkRQS@#%txT{ o(j`G_mH%)(Qw|&Gfnres!t03RzhH$TX8Bva47dJ)fsoAp1-B;_O8@`> diff --git a/src/protocol/__pycache__/__init__.cpython-312.pyc b/src/protocol/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 460009a86658daab0fcb315b9f88c5f2dce71b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 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 diff --git a/src/protocol/__pycache__/registry.cpython-312.pyc b/src/protocol/__pycache__/registry.cpython-312.pyc deleted file mode 100644 index da02cd8df5fe217b1a9a5a2d2bc6add8edddf3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3994 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 bVSYg^_fTLFz4$BY`b%hIdLAJF=HY(;^S&{_ diff --git a/tests/__pycache__/test_protocol.cpython-312.pyc b/tests/__pycache__/test_protocol.cpython-312.pyc deleted file mode 100644 index 07979afbe5e4fe65f2074cff16f63b7be90c868e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16514 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