लौटा रहा है, मैं एक फ़िक्स्चर से कई परीक्षण/परीक्षण कक्षाओं में एक मूल्य वापस करने में सक्षम होना चाहता हूं, लेकिन जो मान पास हो जाता है वह एक कार्य है।पायस्टेस्ट फ़िक्स्चर हमेशा एक फ़ंक्शन
import pytest
@pytest.fixture()
def user_setup():
user = {
'name': 'chad',
'id': 1
}
return user
@pytest.mark.usefixtures('user_setup')
class TestThings:
def test_user(self):
assert user_setup['name'] == 'chad'
उत्पादन होता है:
=================================== FAILURES ===================================
_____________________________ TestThings.test_user _____________________________
self = <tests.test_again.TestThings instance at 0x10aed6998>
def test_user(self):
> assert user_setup['name'] == 'chad'
E TypeError: 'function' object has no attribute '__getitem__'
tests/test_again.py:14: TypeError
=========================== 1 failed in 0.02 seconds ===========================
लेकिन अगर मैं अपने परीक्षण को फिर से लिखने इतना है कि यह usefixtures
डेकोरेटर का उपयोग नहीं करता, यह उम्मीद के रूप में काम करता है:
यहाँ मेरी कोड है
def test_user(user_setup):
assert user_setup['name'] == 'chad'
कोई विचार क्यों सजावट विधि का उपयोग करने का प्रयास करते समय यह काम नहीं कर रहा है?
यह कैसे काम करता है इस बारे में स्पष्ट स्पष्टीकरण के लिए धन्यवाद। मैं सोच रहा था कि मैं अपने टेस्ट क्लास में मौजूद प्रत्येक परीक्षण कार्यों में तर्क जोड़ने के बिना इसे पूरा कर सकता हूं। – Cass
मैं केवल इन दो प्रकारों के लिए अंतर और/या मामलों का उपयोग कर रहा था और जब इसका उपयोग करना, इस स्पष्टीकरण के लिए धन्यवाद। – Zelphir
आधिकारिक दस्तावेज़ों के मुताबिक, आपको प्रत्येक परीक्षण फ़ंक्शन में 'user_setup' जोड़ने के लिए * नहीं होना चाहिए, जब उन्हें '@ pytest.mark.usefixtures' से सजाए गए वर्ग के अंतर्गत समूहित किया गया हो:" usefixtures मार्कर के कारण, प्रत्येक टेस्ट विधि के निष्पादन के लिए क्लींडर फ़िक्स्चर की आवश्यकता होगी, जैसे कि आपने उनमें से प्रत्येक को "cleandir" फ़ंक्शन तर्क निर्दिष्ट किया है। "(स्रोत: http://pytest.org/latest/fixture.html#using-fixtures -फॉर्म-क्लासेस-मॉड्यूल-या-प्रोजेक्ट्स) आखिरकार, इस तरह के समूह परीक्षणों का पूरा बिंदु उन्हें बैच के रूप में उपयोग करना है।) ... शायद यह एक सबसे पुरानी बग है? – Zearin