10

ipython/jupyter 노트북에서 오류가 발생하지만 개별 스크립트로 잘 실행되는 예제를 제공하고 있습니다. ipython/jupyter 노트북에서 unittest의 main 함수를 실행할 수 없습니다

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입니다. 따라서 IPython이 시작되었으므로 커널 연결 파일에 대한 오류가 유효한 속성이 아닙니다. sys.argv를 찾지 않으려면 main에 명시 적 목록을 전달할 수 있습니다. 예를 들어, 당신은 ARGV 목록에 추가 인수를 전달할 수 있습니다

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

: 노트북에서

은 또한 종료에 커널 프로세스를 시도하는 unittest.main 방지하기 위해 exit=False을 포함 할 것

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