python模拟和单元测试一系列改变输入的方法

2024-04-25 21:36:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个过滤器列表,每个过滤器都会更改输入列表。如何为每个将更改输入列表的过滤器创建模拟?你知道吗

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)

我想通过模拟self.filters中输入[1,2,3,4]的过滤器来单元测试apply_filters。有没有办法让每个模拟更改输入arr,并验证是否用这个修改过的arr调用了每个后续过滤器?你知道吗

注意:我可以通过让过滤器返回arr并使用mock.return_value更改mock的输出来绕过这个问题。你知道吗


Tags: inself过滤器列表forifobjectdef
1条回答
网友
1楼 · 发布于 2024-04-25 21:36:06

当您谈到模拟过滤器类时,我认为您的方法也是单独测试过滤器类?这当然还是应该做的,最好是作为第一步来做——如果我没有看错你的代码,那么你很可能会发现一个bug。你知道吗

关于apply_filters的测试:为什么要模拟过滤器类?似乎没有理由-您可以使用一些合适的值来调用apply_filters,以查看是否实际调用了其他筛选器。而且,也许你会发现下一个bug(在纠正了第一个bug之后)——只要试着找到一个在第三个过滤器没有被调用的情况下失败的测试用例。你知道吗

嘲笑应该是有原因的——看看When to use mock objects in unit tests。你知道吗

相关问题 更多 >

    热门问题