Czy istnieje czysty sposób na łatanie obiektu, aby uzyskać pomocników assert_call*
w teście, bez faktycznego usuwania działania?Python mock - łatanie metody bez utrudniania implementacji
Na przykład, w jaki sposób można zmodyfikować linię @patch
aby uzyskać następujący test Podania:
from unittest import TestCase
from mock import patch
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
@patch.object(Potato, 'foo')
def test_something(self, mock):
spud = Potato()
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
mógłbym prawdopodobnie włamywanie tym razem przy użyciu side_effect
, ale miałem nadzieję, że będzie ładniejszy sposób, który działa w ten sam sposób na wszystkich funkcji, classmethods, staticmethods, metod niezwiązanych itp
'foo' i' bar' nie są zdefiniowane poprawnie. Powinny to być 'def foo (self, n)' i 'def bar (self, n)'. – chepner
tak, dziękuję ... naprawiono – wim
Nie ma też sensu twierdzić, że 'foo' został wywołany, ponieważ sam test go wywołuje, a nie jakiś inny testowany kod. Podobnie, testowanie, że 'czterdzieści dwa' jest ustawione na konkretną wartość przez twój * test *, a nie testowany kod, wydaje się mieć niewielką wartość. – chepner