【发布时间】:2017-11-11 13:29:12
【问题描述】:
在下面的测试代码中,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()
【问题讨论】:
标签: python python-3.x mocking generator python-unittest