У меня есть класс FilePlay, который принимает три параметра host_dic
, PATH
, group
все со значениями по умолчанию. Когда host_dic предоставляется, экземпляр объекта создаст файл. Когда не задано, экземпляр объекта проверяет, существует ли файл, если он не вызывает ошибку. Вот код:Использовать unittest assertRaise() с экземпляром объекта
class FilePlay(object):
def __init__(self, host_dic=None, PATH='/foo/', group='bar'):
self.host_dic = host_dic
self.PATH = PATH
self.group = group # this changes with the instantiation
if isinstance(hosts_dic, dict):
# create a file
# change self.group
else:
if os.path.isfile(self.PATH+'hosts'):
# read the file
# change self.group
else:
raise IOError("Neither hosts file found nor host_dic parameter given, cannot instantiate.")
Теперь я хотел бы проверить это с unittest
. Итак, вот мой код:
import unittest
from top.files import FilePlay
import os.path
class Test_FilePlay(unittest.TestCase):
def test_init_PATH(self):
'''It tests FilePlay instatiation when:
PATH parameter is given
'''
test_PATH='/foo/'
if not os.path.isfile(test_PATH+'hosts'): # If there is no hosts file at PATH location
self.assertRaises(IOError,play = FilePlay(PATH=test_PATH)) #Here is the problem!
else: # if there is the hosts file at PATH location
play = FilePlay(PATH=test_PATH)
self.assertEqual(play.group, 'bar')
self.assertEqual(play.hosts_dic, None)
Когда я пытаюсь запустить тест с файлом в местоположении PATH, он работает нормально. Но когда файл НЕ присутствует, я получаю:
======================================================================
ERROR: test_init_PATH (top.tests.test_test_file)
It tests FilePlay instatiation when:
----------------------------------------------------------------------
Traceback (most recent call last):
File "top/tests/test_file.py", line 14, in test_init_PATH
self.assertRaises(IOError,play = FilePlay(PATH=test_PATH))
File "top/ansible_shared.py", line 88, in __init__
raise IOError("Neither hosts file found nor host_dic parameter given, cannot instantiate.")
IOError: Neither hosts file found nor host_dic parameter given, cannot instantiate.
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (errors=1)
Как пройти тест, если файл НЕ присутствует?
Почему бы вам нужно присвоить имя, если вы звоните 'FilePlay 'вызывает исключение? Часть 'play =' не играет никакой роли. При вызове 'FilePlay' непосредственно исключение возникает до того, как вызывается метод' assertRaises() '. И не делайте свой тест условным на наличие файла. Проверьте оба сценария. –
Спасибо за ваш комментарий. Пример действительно поможет .. – diegus
У вас уже есть ответ. –