`mutmut` 在大约 100 个突变体后停止运行

问题描述

在这里发帖是为了帮助mutmutdev解决这个问题,因为他不知道如何修复它。

该问题已被记录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

从上述错误来看,这似乎是一个 multiprocessingthreading 问题。

重要提示如果您想亲自尝试此问题,请在已签入源代码管理的项目中进行,因为手动变异测试工具更改您的代码,然后在测试期间撤消更改,如果发生意外,这可能会导致文件损坏。

似乎最好有一个大中型项目来帮助调查这个问题,因为在重现问题之前您需要至少 200-300 个突变体。

我在 Python 3.9.6 上安装了 mutmutpip install mutmut。 我的 mutmut 版本是 2.1.0

作为参考,我的项目结构如下,但只要您的测试与生产代码(在本例中位于 chalicelib 中)隔离,其他结构应该也能正常工作:

my-project/
    chalicelib/
    tests/

以下是我为我的项目运行 mutmut 的方式:

mutmut run --paths-to-mutate=chalicelib/

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)