10

में unittest के मुख्य फ़ंक्शन को चलाने में असमर्थ मैं एक उदाहरण दे रहा हूं जो ipython/jupyter नोटबुक में कोई त्रुटि फेंकता है, लेकिन एक व्यक्तिगत स्क्रिप्ट के रूप में ठीक चलता है।ipython/jupyter नोटबुक

import unittest 

class Samples(unittest.TestCase): 

    def testToPow(self): 
     pow3 = 3**3 
     assert pow3==27 

if __name__ == '__main__': 
    unittest.main() 

त्रुटि के नीचे है:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-7-232db94ae8b2> in <module>() 
     8 
     9 if __name__ == '__main__': 
---> 10  unittest.main() 

/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in __init__(self, module, defaultTest, argv, testRunner, testLoader, exit, verbosity, failfast, catchbreak, buffer) 
    92   self.testLoader = testLoader 
    93   self.progName = os.path.basename(argv[0]) 
---> 94   self.parseArgs(argv) 
    95   self.runTests() 
    96 

/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in parseArgs(self, argv) 
    147    else: 
    148     self.testNames = (self.defaultTest,) 
--> 149    self.createTests() 
    150   except getopt.error, msg: 
    151    self.usageExit(msg) 

/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in createTests(self) 
    156   else: 
    157    self.test = self.testLoader.loadTestsFromNames(self.testNames, 
--> 158               self.module) 
    159 
    160  def _do_discovery(self, argv, Loader=None): 

/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.pyc in loadTestsFromNames(self, names, module) 
    128   of string specifiers. See 'loadTestsFromName()'. 
    129   """ 
--> 130   suites = [self.loadTestsFromName(name, module) for name in names] 
    131   return self.suiteClass(suites) 
    132 

/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.pyc in loadTestsFromName(self, name, module) 
    98   obj = module 
    99   for part in parts: 
--> 100    parent, obj = obj, getattr(obj, part) 
    101 
    102   if isinstance(obj, types.ModuleType): 

AttributeError: 'module' object has no attribute '/Users/root3d/Library/Jupyter/runtime/kernel-c5225ac4-4b0e-4473-ae0a-3e051a704561' 

क्या संभव समस्या हो सकती है? मुझे नोटबुक में परीक्षण कैसे लिखना चाहिए?

उत्तर

19

unittest.main डिफ़ॉल्ट रूप से sys.argv पर दिखता है, जो आईपीथन शुरू हुआ है, इसलिए कर्नेल कनेक्शन फ़ाइल के बारे में त्रुटि वैध विशेषता नहीं है। Sys.argv को देखने से बचने के लिए आप main पर एक स्पष्ट सूची पास कर सकते हैं।

unittest.main(argv=['first-arg-is-ignored'], exit=False) 

आप argv सूची में आगे तर्क पारित कर सकते हैं जैसे:

नोटबुक में, आप भी बंद करने के लिए कर्नेल प्रक्रिया की कोशिश कर रहा से unittest.main को रोकने के लिए exit=False शामिल करना चाहते हैं जाएगा

unittest.main(argv=['ignored', '-v'], exit=False)