ファイル 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)
ます。
何が間違っているのですか?