2014-01-21 50 views
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我不能在一個簡單的測試用例重現它到目前爲止被複制.. 。

任何想法?

+1

第一個提示:我得到的錯誤信息以'{... \ u0404 \ U0001f48b'}!= {... \ u0404 \ ud83d \ udc8b'}'結束。 unicode字符串真的不同:第二個使用兩個代理而不是一個字符。 –

回答