Доброе утро,
Я пытаюсь запустить несколько юнит-тестов в Python, чтобы подтвердить, что мой код работает, но мне очень трудно заставить Mock-что вписаться в мой тестслучаев.Я новичок в модульном тестировании Python, так что до сих пор это была трудная неделя.
Вкратце о программе я пытаюсь выполнить последовательный контроль коммерческого монитора.Я подумал, что смогу использовать его как шанс наконец-то использовать Python для чего-то большего, чем просто использовать один из других известных мне языков.У меня готовится pyserial, но прежде чем я начну передавать кучу команд на телевизор, я хотел бы изучить часть unittest, чтобы я мог написать для своих ожидаемых выходов и входов.
Я пыталсяиспользуя библиотеку dummyserial, но она, похоже, не распознала вывод, который я отправлял.Я подумал, что попробую mock_open, так как видел, что он также работает как стандартный IO, но он просто не принимает вызовы.Примеры кода:
def testSendCmd(self):
powerCheck = '{0}{1:>4}\r'.format(SharpCodes['POWER'], SharpCodes['CHECK']).encode('utf-8')
read_text = 'Stuff\r'
mo = mock_open(read_data=read_text)
mo.in_waiting = len(read_text)
with patch('__main__.open', mo):
with open('./serial', 'a+b') as com:
tv = SharpTV(com=com, TVID=999, tvInput = 'DVI')
tv.sendCmd(SharpCodes['POWER'], SharpCodes['CHECK'])
com.write(b'some junk')
print(mo.mock_calls)
mo().write.assert_called_with('{0}{1:>4}\r'.format(SharpCodes['POWER'], SharpCodes['CHECK']).encode('utf-8'))
И в классе SharpTV рассматриваемая функция:
def sendCmd(self, type, msg):
sent = self.com.write('{0}{1:>4}\r'.format(type,msg).encode('utf-8'))
print('{0}{1:>4}\r'.format(type,msg).encode('utf-8'))
Очевидно, я пытаюсь управлять телевизором Sharp.Я знаю, что команды верны, это не проблема.Вопрос только в тестировании.Согласно документации на странице mock_open, вызов mo.mock_calls
должен вернуть некоторые данные, которые были сделаны вызовом, но я получаю просто пустой набор [], даже несмотря на явно неправильные com.write(b'some junk')
и mo().write.assert_called_with(...)
возвращается с ошибкой подтверждения, потому что не обнаруживает запись из sendCmd.Что меня действительно беспокоит, так это то, что я могу делать примеры из раздела mock_open в интерактивном режиме, и он работает как положено.
Я что-то упустил, я просто не знаю, что.Мне нужна помощь, чтобы заставить либо работать dummyserial, либо mock_open.