Я новичок в издевательствах и действительно борюсь с этим. В основном в документации и на большинстве страниц SO показано, как получить макет result_value
, но я хочу проверить, верны ли значения, которые я получаю из методов, а не result_value
. Вот пример:
#!/usr/bin/env python
class Example:
def one(self):
return 1
def two(self, one):
print(one + 1) # basically any void method, ex: result = one + 1 and check result value if correct
def main(self):
self.two(self.one())
if __name__ == '__main__':
e = Example()
e.main()
Тест:
#!/usr/bin/env python
import unittest
import example
from mock import patch
class Example(unittest.TestCase):
def test_one(self):
self.assertEqual(1, et.one())
def test_two(self):
with patch('example.Example.two'):
self.assertEqual(2, et.two(et.one())) # ..the part I'm stuck
# whick ofc throws AssertionError: 2 != <MagicMock name='two()' id='blablabla'>
def test_main(self):
# unknown part..
if __name__ == '__main__':
et = example.Example()
unittest.main()
Как выполнить проверку пустого метода с помощью unittest?
ОБНОВЛЕНИЕ:
так что печать Я выяснил с помощью Чепнера:
def test_twoi3(self):
mock_print = MagicMock()
with patch('sys.stdout', mock_print):
print(2)
expected = call.write('2')
self.assertEqual(mock_print.mock_calls[0], expected)
и для main
Я не совсем уверен, если это хорошее решение ...:
def test_main(self):
with patch ('example.Example.main') as m:
et.main(et.two(1))
m.assert_called_with(et.two(1))
но я хочу проверять не передавая методы и значения, а если main
вызывает два других метода. Как этого добиться?