文件描述符级stdout和F2PY扩展模块的Pytest捕获

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

以下代码中的

hello
函数写入stdout。它是用 Fortran 编写的,并使用 numpy.F2PYscikit-build 添加到包 hello-f2py 中。 Pytest 似乎无法捕获它写入标准输出的内容……这是为什么?

这里是测试。

from hello_f2py import hello

def setup_function():
    hello('Earth')

def test_hello_capfd(capfd):
    hello('Moon')
    captured = capfd.readouterr()
    assert captured.out == 'Hello, Moon!\n'

这是测试结果据称没有捕获。

$ pytest -s
=== test session starts ===
platform linux -- Python 3.10.8, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/itcarroll/tmp/skb, configfile: pytest.ini
collected 1 item                                                                                                                                                                                           

test_hello_f2py.py Hello, Earth!
.

=== 1 passed in 0.08s ===

可以看到

Hello, Earth!
是在
setup
调用的时候写的。测试通过使用
capfd
,即使使用
-s
标志。这是我不明白的第一件事。

这是捕获标准输出失败时的结果(没有

-s
标志)。

$ pytest
=== test session starts ===
platform linux -- Python 3.10.8, pytest-7.2.2, pluggy-1.0.0
rootdir: /home/itcarroll/tmp/skb, configfile: pytest.ini
collected 1 item                                                                                                                                                                                           

test_hello_f2py.py F                                                                                                                                                                                 [100%]

======== FAILURES ========
____ test_hello_capfd ____
capfd = <_pytest.capture.CaptureFixture object at 0x7f0969f8f850>

    def test_hello_capfd(capfd):
        hello('Moon')
        captured = capfd.readouterr()
>       assert captured.out == 'Hello, Moon!\n'
E       AssertionError: assert '' == 'Hello, Moon!\n'
E         - Hello, Moon!

test_hello_f2py.py:9: AssertionError
=== short test summary info ====
FAILED test_hello_f2py.py::test_hello_capfd - AssertionError: assert '' == 'Hello, Moon!\n'
=== 1 failed in 0.10s ===
Hello, Earth!
Hello, Moon!

到底是什么?地球和月球没有被捕获并在测试结果后打印出来!?

python pytest f2py
© www.soinside.com 2019 - 2024. All rights reserved.