2016-01-20 3 views
1

У меня есть приложение Python, которое скомпилировано в .exe.
В некоторых случаях, программа завершается с sys.exit(), но не закрывать окно консоли Я делаю это с кодом ниже, который работает отлично:Система («пауза») в unittest

try: 
    sys.exit() 
except SystemExit: 
    raise 
finally: 
    os.system("pause") 

Проблема заключается в том, что мне нужно проверить если мой код вызывает SystemExit, но из-за финального блока тесты не могут пройти - они просто бесконечны.
Есть ли возможность, чтобы убрать пропуск os.system("pause")?
Я могу добавить параметр по умолчанию, который предотвратит приостановку, но в моем случае это будет сложным - если есть какая-то возможность, я хотел бы сделать это в unittests.

+0

Почему вы выполняете единичный тест на уровне приложения? –

+1

просто патч 'os.system' для этого теста – kwarunek

+0

@ ignacio-vazquez-abrams - я запускаю функцию' main() 'с определенными параметрами и проверяю, вызывает ли это SystemExit - как проверить это не в unittests (я не уверен, правильно ли я понимаю ваш комментарий)? @kwarunek - вы можете сказать что-то еще? – Djent

ответ

2

Я бы просто высмеял os.system. Более того, даже sys.exit утверждать, если он вызывается.

# your_module.py 
import sys 
import os 


def something(): 
    try: 
     sys.exit() 
    except SystemExit: 
     raise 
    finally: 
     os.system("pause") 

И тест

import unittest 
import your_module 
try: 
    from unittest.mock import patch 
except ImportError: 
    from mock import patch 


class TestSysexit(unittest.TestCase): 

    @patch('your_module.os.system') 
    def test_system_exit(self, mock_os_system): 

     with self.assertRaises(SystemExit): 
      your_module.something() 
     mock_os_system.assert_called_once_with('pause') 

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

издеваться и патч в unittest.mock на Python3 и в ложном библиотеке python2.

+0

Как я вижу, mock является новым в Python 3.3 - я использую Python 2.7. – Djent

+0

на python2 'pip install mock'' из mock import patch' – kwarunek

+0

Я отредактировал ответ с полным примером py2/py3 comp. – kwarunek