Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用pytest将模块放入测试线束中?_Python 2.7_Unit Testing_Pytest - Fatal编程技术网

Python 2.7 如何使用pytest将模块放入测试线束中?

Python 2.7 如何使用pytest将模块放入测试线束中?,python-2.7,unit-testing,pytest,Python 2.7,Unit Testing,Pytest,假设我有一个名为boop.py的文件 内容如下: import module_a import sys def boop(value): val = module_a.boop_it(value) # ... return val 我的问题是: 当我为这个做测试时,我怎样才能使模块_a成为一个虚拟模块? 我知道我需要隔离依赖关系。我只是不懂它的原理 是否有必要将其完全隔离?如果我不,它会咬我吗 请注意,这都是已经存在并有多年历史的遗留代码。要回答您的第二个问题,是否需

假设我有一个名为boop.py的文件

内容如下:

import module_a
import sys

def boop(value):
    val = module_a.boop_it(value)
    # ...
    return val
我的问题是:

当我为这个做测试时,我怎样才能使模块_a成为一个虚拟模块? 我知道我需要隔离依赖关系。我只是不懂它的原理

是否有必要将其完全隔离?如果我不,它会咬我吗


请注意,这都是已经存在并有多年历史的遗留代码。

要回答您的第二个问题,是否需要将其完全隔离?:这取决于。即使您正在进行单元测试,通常也不必将代码与所有依赖项隔离开来。例如,您不会将代码与math.sin隔离。我甚至会说,除非有理由,否则应该避免创造双打。然而,在实践中,往往有一个原因

以下是一些标准,可以帮助您确定模块的依赖性是否在单元测试时困扰您。它们都与依赖组件文档的属性有关,在您的案例中,模块_a包括其可传递的依赖项以及您的测试目标:

您是否可以将文档带入所有期望的状态/您是否可以确保使用该文档可以实际执行所有感兴趣的测试场景?如果没有,最好隔离,这样您就可以用所有想要的方式测试代码。 调用文档是否会导致任何非皮肤病行为日期/时间、随机性、网络连接?然后最好隔离代码,使测试具有确定性。 调用文档是否会导致不可接受的长时间测试执行?如果是,隔离以确保可接受的测试执行时间。 文档稳定性成熟度问题是否会使测试对您的组件不可靠,或者更糟糕的是,文档是否不可用,但不适用于您的特定示例?如果是这样,您最好隔离测试,甚至只需让测试可执行,并提供关于您自己代码的可信结果。
但是,即使上面的标准表明依赖关系正在困扰您:请记住,代码的一些重新设计可能比创建双重测试更可取。例如,通过将计算与交互分离到不同的函数中,可以避免一些模拟:使用单元测试测试计算,使用集成测试测试交互。

为什么要模拟/存根模块?在您的示例中,模拟module_a.boop_it函数将是正确的方法。对。我该怎么做?