2013-06-17 5 views
5

नाक। टोल का उपयोग करने और पिलिंट को खुश रखने का सही तरीका क्या है?नाक उपकरण और पिलिंट

निम्नलिखित कोड:

''' 
This is a test 
''' 

import nose.tools 
import nose.tools.trivial 

nose.tools.assert_equal(1, 1) 
nose.tools.assert_equals(1, 1) 

nose.tools.trivial.assert_equal(1, 1) 
nose.tools.trivial.assert_equals(1, 1) 

निम्नलिखित pylint त्रुटियों में परिणाम:

$ pylint -i y -r n /tmp/aseq.py 
************* Module aseq 
E1101: 8,0: Module 'nose.tools' has no 'assert_equal' member 
E1101: 9,0: Module 'nose.tools' has no 'assert_equals' member 
E1101: 11,0: Module 'nose.tools.trivial' has no 'assert_equal' member 
E1101: 12,0: Module 'nose.tools.trivial' has no 'assert_equals' member 
बेशक

, एक E1101 अक्षम कर सकते हैं, वहाँ एक क्लीनर तरीका है?

उत्तर

2

nose.tools.trivial बस मक्खी पर unittest.TestCase वर्ग निरीक्षण करता है और बनाता है सभी "सार्वजनिक" तरीकों nose.tools या nose.tools.trivial से assert उपलब्ध से शुरू:

नाक/उपकरण/__ init__.py:

from nose.tools.nontrivial import * 
from nose.tools.nontrivial import __all__ as nontrivial_all 
from nose.tools.trivial import * 
from nose.tools.trivial import __all__ as trivial_all 

__all__ = trivial_all + nontrivial_all 

नाक/उपकरण /trivial.py:

... 

class Dummy(unittest.TestCase): 
    def nop(): 
     pass 
_t = Dummy('nop') 

for at in [ at for at in dir(_t) 
      if at.startswith('assert') and not '_' in at ]: 
    pepd = pep8(at) 
    vars()[pepd] = getattr(_t, at) 
    __all__.append(pepd) 

... 

पिलिंट इस "हैकी" व्यवहार को संभाल नहीं सकता है।

और assert_equals के बजाय nose.tools.eq_ का उपयोग करने पर विचार करें (ये विधियां वास्तव में वही हैं)। उम्मीद है की वो मदद करदे।

+0

यह अच्छी अंतर्दृष्टि है। हालांकि, ऐसा लगता है कि 'assertEqual' /' assertEquals' के अनजान कार्यान्वयन के 'नाक/उपकरण/trivial.py' "पेप 8" संस्करणों में' assert_equal'/'assert_equals' आदि के रूप में जोड़ा गया है लेकिन 'assertEqual' और' assertEquals' जोड़ा नहीं है। nose.tools इसे 'eq_' का अपना कार्यान्वयन प्रदान करता है, जो कि अखंड के कार्यान्वयन से अलग होता है (हालांकि दोनों एक जैसा होना चाहते हैं)। – user650654

+0

निश्चित रूप से, अच्छा बिंदु, मेरा मतलब था 'assert_equal' और' assert_equals'। हां, 'eq_'' unittest.TestCase' के 'assertEqual/assertEquals' विधियों की तुलना में थोड़ा अलग काम करता है। – alecxe

4

इसके बजाय E1101 को अक्षम करने का है, तो आप रखना चाहिए:

ignored-classes=nose.tools,nose.tools.trivial 
.pylintrc में

, [TYPECHECK] धारा के तहत।

चूंकि यह pylint doc में खड़ा है, यह विकल्प "गतिशील रूप से सेट गुणों वाले वर्गों के लिए उपयोगी" है।

+1

ऐसा लगता है कि इसे काम करना चाहिए, लेकिन पिलिंट अभी भी एक ही त्रुटि फेंक रहा है। मैं क्या खो रहा हूँ? मैं nosetests संस्करण 1.3.0 का उपयोग कर रहा हूँ। –

+0

मैं सिर्फ python = 2.7.4, नाक = 1.3.0 और पिलिंट = 1.0.0 के साथ वर्चुअलनव में कोशिश करता हूं, आरसीफाइल 'pylint --generate-rcfile' द्वारा प्राप्त होता है: अब और नहीं E1101 जब मैंने 'अनदेखा- आरसीएफआईएल में कक्षाएं ' क्या आप एक ही चीज़ की कोशिश कर सकते हैं? –

1

पिलिंट नाक अंतर्निहित जादू को समझ में नहीं आता है। जैसा कि सुझाव दिया गया है, समाधानों में E1101 को अक्षम करना या संबंधित वर्गों को अनदेखा करना शामिल है। लेकिन सबसे अच्छा है कि pylint-brain project में एपीआई के हिस्से का एक सरल वर्णन प्रस्तुत करके Pylint द्वारा ग्रैप नहीं किया गया है। यह डॉक्टर और उदाहरण से बहुत सरल होना चाहिए जो आपको वहां मिलेगा।

+0

हम्म, वह लिंक मृत लगता है। – user650654

+0

@ user650654 वास्तव में, https://bitbucket.org/logilab/pylint-brain का उपयोग करें – sthenault

+0

एक अच्छा विचार की तरह लगता है, लेकिन मुझे उत्पादन में इसका उपयोग करने के लिए एक पाइप इंस्टॉल की आवश्यकता है। पीपी में एक संस्करण जारी करने की कोई योजना है? –

0

pylint 1.4.3 का उपयोग करना (astroid 1.3.6 के साथ, आम 0.63.2, अजगर 2.7.10), सेटिंग है कि परिवर्तित करने की ignored-modules है, और नहीं ignored-classes:

ignored-modules=nose.tools,nose.tools.trivial 
संबंधित मुद्दे