问题描述
我在这里发帖是为了帮助mutmut
的dev解决这个问题,因为他不知道如何修复它。
该问题已被记录here.
基本上,当您运行 mutmut
并告诉它为您的项目运行 Mutation Tests 时,在大约 100 个左右的突变后,它会停止运行,迫使您再次运行它以使其恢复它停止的地方。
虽然并非所有 mutmut
用户都会发生这种情况,但仍然会发生在某些用户身上,这使其成为一个非常现实的问题。
通常,它会停止而不打印任何错误(这是错误的,因为它是意外终止),但它很少会打印如下内容:
Exception in thread queue_mutants:
Traceback (most recent call last):
File "c:\python39\lib\site-packages\mutmut\__init__.py",line 712,in queue_mutants
Traceback (most recent call last):
mutants_queue.put(('mutant',context))
File "c:\python39\lib\multiprocessing\queues.py",line 88,in put
File "c:\python39\lib\multiprocessing\queues.py",line 247,in _Feed
send_bytes(obj)
File "c:\python39\lib\multiprocessing\connection.py",line 205,in send_bytes
self._send_bytes(m[offset:offset + size])
raise ValueError(f"Queue {self!r} is closed")
File "c:\python39\lib\multiprocessing\connection.py",line 285,in _send_bytes
ov,err = _winapi.WriteFile(self._handle,buf,overlapped=True)
ValueError: Queue <multiprocessing.queues.Queue object at 0x000001617B72CCD0> is closed
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "c:\python39\lib\threading.py",line 954,in _bootstrap_inner
brokenPipeError: [WinError 232] The pipe is being closed
从上述错误来看,这似乎是一个 multiprocessing
或 threading
问题。
重要提示:如果您想亲自尝试此问题,请在已签入源代码管理的项目中进行,因为手动变异测试工具更改您的代码,然后在测试期间撤消更改,如果发生意外,这可能会导致文件损坏。
似乎最好有一个大中型项目来帮助调查这个问题,因为在重现问题之前您需要至少 200-300 个突变体。
我在 Python 3.9.6
上安装了 mutmut
和 pip install mutmut
。
我的 mutmut
版本是 2.1.0
。
作为参考,我的项目结构如下,但只要您的测试与生产代码(在本例中位于 chalicelib
中)隔离,其他结构应该也能正常工作:
my-project/
chalicelib/
tests/
以下是我为我的项目运行 mutmut
的方式:
mutmut run --paths-to-mutate=chalicelib/
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)