10

Sto dando un esempio che genera un errore nel blocco appunti ipython/jupyter, ma funziona come un singolo script.Impossibile eseguire la funzione principale di unittest nel notebook ipython/jupyter

import unittest 

class Samples(unittest.TestCase): 

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

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

L'errore è qui sotto:

--------------------------------------------------------------------------- 
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' 

quello che potrebbe essere il possibile problema? Come dovrei scrivere test su notebook, quindi?

risposta

19

unittest.main visualizza sys.argv per impostazione predefinita, che è ciò che ha avviato IPython, quindi l'errore sul file di connessione del kernel non è un attributo valido. È possibile passare un elenco esplicito a main per evitare di cercare sys.argv.

nel notebook, vorrete anche includere exit=False per evitare unittest.main dal tentativo di arrestare il processo di kernel:

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

È possibile passare ulteriori argomenti nella lista argv, per esempio

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