test: test_queue_sandbox robustness 断言不再读 sys.modules["queue"](全量语境下该槽位已被其它测试的 cloud/ 遮蔽污染)
This commit is contained in:
1 parent
38243d3e7f
commit
9dcd5549d3
1 file changed
+14
-2
@@ -655,9 +655,21 @@ class TestImportRobustness(unittest.TestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def test_stdlib_queue_not_shadowed(self):
|
def test_stdlib_queue_not_shadowed(self):
|
||||||
# 本文件加载后,sys.modules["queue"] 仍是标准库,不是 cloud/queue.py。
|
# 本文件用的 TaskQueue 必须是 cloud.queue 包导入的,与顶层
|
||||||
import queue as stdlib_queue
|
# sys.modules["queue"] 无关:全量套件里已有其它测试把 cloud/
|
||||||
|
# 插进 sys.path 并以顶层名 import queue,sys.modules["queue"]
|
||||||
|
# 在该语境下就是 cloud/queue.py,那是其它测试的污染,不是
|
||||||
|
# 本文件的依赖——本断言绝不能读 sys.modules["queue"]。
|
||||||
|
# 标准库 queue 改从 stdlib 目录按路径独立加载、与包导入对照。
|
||||||
|
import importlib.util
|
||||||
|
import sysconfig
|
||||||
|
|
||||||
|
self.assertEqual(TaskQueue.__module__, "cloud.queue")
|
||||||
|
stdlib_path = sysconfig.get_paths()["stdlib"] + "/queue.py"
|
||||||
|
spec = importlib.util.spec_from_file_location(
|
||||||
|
"stdlib_queue_for_robustness_check", stdlib_path)
|
||||||
|
stdlib_queue = importlib.util.module_from_spec(spec)
|
||||||
|
spec.loader.exec_module(stdlib_queue)
|
||||||
self.assertNotIn("cloud", stdlib_queue.__file__)
|
self.assertNotIn("cloud", stdlib_queue.__file__)
|
||||||
self.assertNotIn("TaskQueue", dir(stdlib_queue))
|
self.assertNotIn("TaskQueue", dir(stdlib_queue))
|
||||||
# 包导入的 TaskQueue 与标准库无关。
|
# 包导入的 TaskQueue 与标准库无关。
|
||||||
|
|||||||
Reference in new issue
Block a user