如何在调用 Cython 模块后获得线路覆盖率

问题描述 投票:0回答:1

我有一些代码使用的库恰好在底层使用了 Cython。

我观察到,在对该库中的 Cython 函数进行任何调用之后,我自己的代码中没有任何行被认为已执行,即使我有明确执行它们的测试(我什至通过放入来测试这一点) a

throw
以确保他们失败了。)

def some_function():
  cython_library.do_something()
  do_something_else()  # Always shows red in coverage

Cython 似乎不会包含覆盖率信息,除非它以慢速覆盖模式重新编译,但我不能这样做,因为我不拥有该库。我尝试使用文档建议的各种环境变量和插件以防万一,但无济于事。

有什么办法可以解决这个问题吗?不幸的是,我不能简单地完全模拟底层库,因为如果他们模拟了行为,我的测试将毫无意义。我愿意考虑令人不快的黑客攻击,比如在我的代码和 Cython 代码之间修补一些逻辑,以迫使 Python“注意到”它实际上击中了代码行,但我天真的尝试这样做并没有达到我的预期效果我不知道我能做什么让 Python 注意到!

  • 唯一能触发它意识到它回到代码中的是
    await
    ,但我不能在这里这样做,因为这些不是协程。
  • 我尝试将这些函数的执行推送到工作线程,但它们使用我无法访问的线程局部变量。
cython coverage.py
1个回答
0
投票

我进一步研究了这个问题,结果发现这是我正在使用的库中的一个错误,导致跟踪函数被错误地替换。

© www.soinside.com 2019 - 2024. All rights reserved.