4

ファイル python_assert.py と cython_assert.pyx を同一になるように定義し、それぞれに AssertionError を発生させる単純な関数を含めます。

def raise_assertionerror():
    assert False

次の両方のテストが pytest で成功することを期待します。

import pytest

import pyximport
pyximport.install()

from python_assert import raise_assertionerror as python_assert
from cython_assert import raise_assertionerror as cython_assert

def test_assertion():
    with pytest.raises(AssertionError):
        python_assert()

def test_cython_assertion():
    with pytest.raises(AssertionError):
        cython_assert()

ただし、cython テストは失敗します。

===================================== FAILURES ======================================
_______________________________ test_cython_assertion _______________________________

    def test_cython_assertion():
        with pytest.raises(AssertionError):
>           cython_assert()

test_pytest_assertion.py:15: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

>   assert False
E   AssertionError

cython_assert.pyx:2: AssertionError
======================== 1 failed, 1 passed in 0.61 seconds =========================

同等の単体テストが成功するため、これは pytest の問題のようです。

import unittest

import pyximport
pyximport.install()

from python_assert import raise_assertionerror as python_assert
from cython_assert import raise_assertionerror as cython_assert

class MyTestCase(unittest.TestCase):
    def test_cython(self):
        self.assertRaises(AssertionError, cython_assert)

    def test_python(self):
        self.assertRaises(AssertionError, python_assert)

if __name__ == "__main__":
    unittest.main()

pytest.raises(Exception)さらに、 の代わりにを呼び出すと、pytest テストは成功しpytest.raises(AssertionError)ます。

何が間違っているのですか?

4

1 に答える 1

4

This has been recognized as a bug in pytest and resolved.

于 2012-12-12T17:37:07.523 に答える