unittest是否适用于Python中的功能(非面向对象)程序?

unittest是否适用于Python中的功能(非面向对象)程序?,python,unit-testing,mocking,Python,Unit Testing,Mocking,我是一个初学者程序员,在过去的一周里,我一直在尝试编写单元测试。我阅读了单元测试文档,并观看了两个关于使用Mock实现单元测试的长教程。这些文档广泛地引用了模拟类,但对于函数,我不确定是否应该使用@patch/with patch,patch.dict{},side_effect,或者其他一些选项来模拟函数,特别是函数的参数 mymodule.py def regex(): '''Runs a regex, creates a dict 'data' and then calls scr

我是一个初学者程序员,在过去的一周里,我一直在尝试编写单元测试。我阅读了单元测试文档,并观看了两个关于使用
Mock
实现单元测试的长教程。这些文档广泛地引用了模拟类,但对于函数,我不确定是否应该使用
@patch/with patch
patch.dict{}
side_effect
,或者其他一些选项来模拟函数,特别是函数的参数

mymodule.py

def regex():
    '''Runs a regex, creates a dict 'data' and then calls scraper(data)'''

def scraper(data):
    '''scrapes a website and then calls a function which submits data to a db'''

我想创建一个测试,将测试数据传递到函数
scraper
。提前感谢您。

您没有给出足够的示例来提供真正的帮助,但有几点值得注意:

  • 一般来说,最好对代码进行结构化,以避免在测试中进行模拟;在可能的范围内,每个函数都应该是一段独立的代码,可以单独调用

  • 没有必要嘲笑争论;只需将测试值传入即可

  • 我不确定此代码的用途:

    bar={'key':'value'}
    def foo(巴):
    通过
    
    在外部级别定义的
    bar
    是一个与函数定义中用作参数的
    bar
    完全独立的变量。给他们起同一个名字是令人困惑的

  • 可以使用
    patch
    patch.object
    以及
    return\u value=…
    选项模拟函数;不过,它通常建议需要对代码进行重构,以减少两个函数之间的依赖关系


您没有给出足够的示例来提供真正的帮助,但有几个观察结果:

  • 一般来说,最好对代码进行结构化,以避免在测试中进行模拟;在可能的范围内,每个函数都应该是一段独立的代码,可以单独调用

  • 没有必要嘲笑争论;只需将测试值传入即可

  • 我不确定此代码的用途:

    bar={'key':'value'}
    def foo(巴):
    通过
    
    在外部级别定义的
    bar
    是一个与函数定义中用作参数的
    bar
    完全独立的变量。给他们起同一个名字是令人困惑的

  • 可以使用
    patch
    patch.object
    以及
    return\u value=…
    选项模拟函数;不过,它通常建议需要对代码进行重构,以减少两个函数之间的依赖关系


我感谢您的回答,我将澄清这个问题,而不是在这里详细说明。好的,所以在您调用的测试中:
scraper(test\u data)
无需模拟。好的,我必须在某个地方有另一个bug,但我会根据需要排除故障并将其留到另一篇文章中。谢谢你。我感谢你的回答,我将澄清这个问题,而不是在这里详细说明。好的,所以在测试中你调用:
scraper(test\u data)
无需模拟。好的,我必须在某个地方有另一个bug,但我会根据需要进行故障排除并将其留到另一篇文章中。非常感谢。