복붙노트

[PYTHON] 유닛 테스트로 인해 sys.exit ()가 발생했습니다.

PYTHON

유닛 테스트로 인해 sys.exit ()가 발생했습니다.

sys.exit ()는 unittest에 의해 호출됩니다. 심지어 가장 간단한 예제도 있습니다. 설치가 엉망이거나 무슨 일이 일어나는지 알 수 없습니다.

IDLE 1.2.2      ==== No Subprocess ====
>>> import unittest
>>> 
>>> class Test(unittest.TestCase):
        def testA(self):
            a = 1
            self.assertEqual(a,1)

>>> unittest.main()
option -n not recognized
Usage: idle.pyw [options] [test] [...]

Options:
  -h, --help       Show this message
  -v, --verbose    Verbose output
  -q, --quiet      Minimal output

 Examples:
   idle.pyw                               - run default set of tests
   idle.pyw MyTestSuite                   - run suite 'MyTestSuite'
   idle.pyw MyTestCase.testSomething      - run MyTestCase.testSomething
   idle.pyw MyTestCase                    - run all 'test*' test methods
                                           in MyTestCase

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    unittest.main()
  File "E:\Python25\lib\unittest.py", line 767, in __init__
    self.parseArgs(argv)
  File "E:\Python25\lib\unittest.py", line 796, in parseArgs
    self.usageExit(msg)
  File "E:\Python25\lib\unittest.py", line 773, in usageExit
    sys.exit(2)
SystemExit: 2
>>> 

해결법

  1. ==============================

    1.귀하의 예가 제 설치시에도 종료됩니다. 테스트를 실행하고 Python 내에서 변경 사항을 유지하도록 할 수 있습니다.

    귀하의 예가 제 설치시에도 종료됩니다. 테스트를 실행하고 Python 내에서 변경 사항을 유지하도록 할 수 있습니다.

    unittest.main()
    

    unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
    

    더 자세한 정보는 Python Library Reference에서보실 수 있습니다.

  2. ==============================

    2.새로운 Python 2.7 릴리스에서 unittest.main ()에는 새로운 인수가 있습니다.

    새로운 Python 2.7 릴리스에서 unittest.main ()에는 새로운 인수가 있습니다.

    'exit'가 False로 설정된 경우 unit.est ()는 unittest.main ()을 실행하는 동안 호출되지 않습니다.

  3. ==============================

    3.IDLE에서 unittest.main ()을 실행하지 마십시오. sys.argv에 액세스하려고 시도하고 있으며 IDLE이 시작된 args를 얻고 있습니다. 테스트를 IDLE과 다른 방법으로 실행하거나 자체 Python 프로세스에서 unittest.main ()을 호출하십시오.

    IDLE에서 unittest.main ()을 실행하지 마십시오. sys.argv에 액세스하려고 시도하고 있으며 IDLE이 시작된 args를 얻고 있습니다. 테스트를 IDLE과 다른 방법으로 실행하거나 자체 Python 프로세스에서 unittest.main ()을 호출하십시오.

  4. ==============================

    4.unittest.py에 대한 소스 코드를 열어 poptest.py. unittest.main ()은 모든 테스트를 실행 한 후 sys.exit ()을 호출하도록 하드 코딩되어 있습니다. TextTestRunner를 사용하여 프롬프트에서 테스트 스위트를 실행합니다.

    unittest.py에 대한 소스 코드를 열어 poptest.py. unittest.main ()은 모든 테스트를 실행 한 후 sys.exit ()을 호출하도록 하드 코딩되어 있습니다. TextTestRunner를 사용하여 프롬프트에서 테스트 스위트를 실행합니다.

  5. ==============================

    5.unittest 모듈을 처음 시도 할 때 테스트가 작동 함을 보여주고 Python 쉘을 종료하지 않는다는 것을 알면 좋을 것입니다. 그러나 이러한 솔루션은 버전에 따라 다릅니다.

    unittest 모듈을 처음 시도 할 때 테스트가 작동 함을 보여주고 Python 쉘을 종료하지 않는다는 것을 알면 좋을 것입니다. 그러나 이러한 솔루션은 버전에 따라 다릅니다.

    나는 직장에서 Python 2.6을 사용하고 unittest (unittest는 Python 2.7에서 발견 된 unittest 모듈 임)로 import한다.

    JoeSkora의 해결책은 그것을 수행하고 반복하는 동안 unittest.main (exit = False)은 Python 2.6의 unittest2에서 작동하지 않습니다.

    unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(Test))
    

    이를 다양한 구성 객체에 대한 올바른 의미 론적 이름으로 구성 요소 및 기본 인수로 분류하려면 다음을 수행하십시오.

    import sys # sys.stderr is used in below default args
    
    test_loader = unittest.TestLoader()
    loaded_test_suite = test_loader.loadTestsFromTestCase(Test)
                                               # Default args:
    text_test_runner = unittest.TextTestRunner(stream=sys.stderr,
                                               descriptions=True, 
                                               verbosity=1)
    text_test_runner.run(loaded_test_suite)
    

    Python 2.7 이상에서는 다음이 작동합니다.

    unittest.main(exit=False)
    
  6. ==============================

    6.

    try:
        sys.exit()
    except SystemExit:
        print('Simple as that, but you should really use a TestRunner instead')
    
  7. from https://stackoverflow.com/questions/79754/unittest-causing-sys-exit by cc-by-sa and MIT license