3
SoCo項目有一個小測試套件,其中一個測試僅在第一次運行時(當不存在pyc文件時)在pypy下失敗。後續運行成功。比較pypy下的pytest中的unicode在第一次運行時失敗
當運行在第一次測試中,失敗測試輸出
E assert {'CurrentLEDS...': 'μИⅠℂ☺ΔЄ'} == {'CurrentLEDSt...: 'μИⅠℂ☺ΔЄ'}
E Common items:
E {'CurrentLEDState': 'On'}
E Differing items:
E {'Unicode': 'μИⅠℂ☺ΔЄ'} != {'Unicode': 'μИⅠℂ☺ΔЄ'}
注意的是,在「不同的項目」雙方完全相等。測試運行創建一個unittest/__pycache__/test_services.pypy-20-PYTEST.pyc
文件。在保持文件完好的狀態下運行測試時,它會成功。當刪除pyc文件並再次運行測試時,它會失敗。
失敗的測試可以用(假設你已經安裝了pypy)
mkdir soco-tmp
cd soco-tmp/
git clone https://github.com/SoCo/SoCo.git
cd SoCo/
git reset --hard 4d6cea18d30e5b30ed5c6f #that's the current revision when writing this
virtualenv -p `which pypy` venv
source venv/bin/activate
python --version
# Python 2.7.3 (2.2.1+dfsg-1~ppa1, Nov 28 2013, 02:02:56)
# [PyPy 2.2.1 with GCC 4.6.3]
pip install -r requirements.txt -r requirements-dev.txt
pip install .
py.test unittest/test_services.py # should fail
py.test unittest/test_services.py # should succeed
rm unittest/__pycache__/*
python -B -mpytest unittest/test_services.py # will always fail as no pyc is created
這似乎是在PyPy一個錯誤,但OTOH我不能在一個簡單的測試用例重現它到目前爲止被複制.. 。
任何想法?
第一個提示:我得到的錯誤信息以'{... \ u0404 \ U0001f48b'}!= {... \ u0404 \ ud83d \ udc8b'}'結束。 unicode字符串真的不同:第二個使用兩個代理而不是一個字符。 –