我有一个过滤器列表,每个过滤器都会更改输入列表。如何为每个将更改输入列表的过滤器创建一个模拟?
class TwoFilter(object):
def filter(self, arr):
arr[:] = [i for i in arr if i % 2 != 0]
class ThreeFilter(object):
def filter(self, arr):
arr[:] = [i for i in arr if i % 3 != 0]
class FourFilter(object):
def filter(self, arr):
arr[:] = [i for i in arr if i % 3 != 0]
class MyFilters(object):
def __init__(self):
self.filters = [TwoFilter(), ThreeFilter(), FourFilter()]
def apply_filters(self, arr):
for f in self.filters:
f.filter(arr)
我想通过模拟apply_filters
中输入[1,2,3,4]中的过滤器来对self.filters
进行单元测试。有没有办法让每个模拟更改输入arr
并验证是否使用此经过修改的arr
调用了每个后续过滤器?
PS:我可以通过让过滤器返回arr
并使用mock.return_value
来更改模拟输出来解决这个问题。
答案 0 :(得分:0)
当您谈到模拟过滤器类时,我认为您的方法也要分别测试过滤器类?当然,这仍然应该做,最好做得更好-如果我没看错您的代码,那么您很可能会发现一个错误。
关于apply_filters
的测试:为什么要完全模拟过滤器类?似乎没有道理-您可以使用apply_filters
的一些合适值调用arr
来查看是否实际调用了其他过滤器。而且,也许您找到了下一个错误(在更正了第一个错误之后)-只是尝试查找如果未调用第三个过滤器就会失败的测试用例。
应该出于某种原因进行模拟-看一下When to use mock objects in unit tests。