테스트중인 코드에서 Generator 클래스에는 Counter 클래스의 next_count
메서드를 호출하는 두 개의 메서드가 있습니다.발전기 내에서 조롱 된 객체에 대한 호출이 올바르게 테스트되지 않는 이유는 무엇입니까?
next_count
에 대한 이러한 두 건의 호출은 assert_called_with
을 사용하여 거의 동일한 두 가지 테스트를 통해 테스트됩니다. 생성기 메서드의 테스트가 실패합니다. 왜? 이 호출을 어떻게 테스트 할 수 있습니까?
코드에서 테스트
generator.py
class Counter:
def __init__(self):
self.count = 1
def next_count(self):
self.count += 1
return self.count
class Generator:
def __init__(self):
self.counter = Counter()
def direct_call(self):
self.counter.next_count()
def iter_event(self):
while True:
yield self.counter.count
self.counter.next_count()
테스트 모듈
test_generator.py
import unittest
import unittest.mock
import generator
class Generator(unittest.TestCase):
def setUp(self):
p = unittest.mock.patch('generator.Counter')
self.addCleanup(p.stop)
self.mock_counter = p.start()
def test_next_count_called_in_direct_call(self): # Passes
g = generator.Generator()
g.direct_call()
self.mock_counter.assert_called_with()
def test_next_count_called_in_iter_event(self): # Fails
g = generator.Generator()
count_gen = g.iter_event()
next(count_gen)
next(count_gen)
self.mock_counter.next_count.assert_called_with()