2013-08-11 2 views
2

я, чтобы проверить следующий класс:как проверить, нужно ли программа выходит или не

from random import randint 

class End(object): 
      def __init__(self): 
      self.quips=['You dead', 'You broke everything you can','You turn you head off'] 

      def play(self): 
       print self.quips[randint(0, len(self.quips)-1)] 
       exit(1) 

Я хочу, чтобы проверить его с nosetests, чтобы я мог видеть, что класс выходит правильно с кодом 1. Я попытался Differents варианты но nosetest возвращается ошибка как

File "C:\Python27\lib\site.py", line 372, in __call__ 
    raise SystemExit(code) 
SystemExit: 1 

---------------------------------------------------------------------- 
Ran 1 test in 5.297s 

FAILED (errors=1) 

Ofcourse Я могу предположить, что он выходит, но я хочу для теста, чтобы вернуть OK статус не ошибка. Извините, если мой вопрос может быть глупым. Im очень новый для python, и я пытаюсь проверить что-то в первый раз.

ответ

0

Как вы можете видеть в трассе, sys.exit() * вызывает исключение под названием SystemExit, когда вы его вызываете. Итак, это то, что вы хотите протестировать с носом assert_raises(). Если вы пишете тесты с unittest2.TestCase, то это self.assertRaises.

* Фактически вы использовали простой встроенный exit(), но вы действительно должны использовать sys.exit() в программе.

+0

Я пробовал: Защиту test_End():. конец = End() играть() assert_raises (SystemExit (1), конец), но он не работает – user2569002

+0

@ user2569002 использует 'assert_raises (SystemExit, end)', а не 'assert_raises (SystemExit (1), end)'. Он ожидает вызова. – roippi

+0

Я бы рекомендовал менеджер контекста assertRaises - я думаю, что это приводит к более разборчивым тестам. – dbn

1

Я бы рекомендовал использовать assertRaises context manager. Вот пример тест, который гарантирует, что метод воспроизведения() выходит:

import unittest 
import end 

class TestEnd(unittest.TestCase): 
    def testPlayExits(self): 
     """Test that the play method exits.""" 
     ender = end.End() 
     with self.assertRaises(SystemExit) as exitexception: 
      ender.play() 
     # Check for the requested exit code. 
     self.assertEqual(exitexception.code, 1)