谁能在编写测试用例时解释Python setUp
和tearDown
方法的使用,除了setUp
在调用测试方法之前立即调用和在调用测试方法tearDown
之后立即调用之外?
Answers:
通常,您将所有必备步骤添加到setUp,并将所有清理步骤添加到tearDown。
您可以在此处阅读更多示例。
定义setUp()方法后,测试运行程序将在每次测试之前运行该方法。同样,如果定义了tearDown()方法,则测试运行程序将在每次测试后调用该方法。
例如,您有一个测试,要求项目存在或处于某种状态-因此您将这些操作(创建对象实例,初始化db,准备规则等)放入setUp中。
同样,您知道每个测试都应该在开始的地方停止-这意味着我们必须将应用程序状态恢复到其初始状态-例如关闭文件,连接,删除新创建的项目,调用事务回调等等-所有这些步骤将包含在tearDown中。
因此,想法是测试本身应该只包含要在测试对象上执行以获取结果的动作,而setUp和tearDown是帮助您保持测试代码干净灵活的方法。
您可以为一堆测试创建setUp和tearDown并在父类中定义它们-因此,您很容易支持此类测试并更新常规准备工作和清理工作。
如果您正在寻找简单的示例,请使用以下带有示例的链接
您可以使用它们来排除测试套件中所有测试通用的代码。
如果您的测试中有很多重复的代码,可以通过将此代码移到setUp / tearDown来使它们更短。
您可以使用它来创建测试数据(例如,设置伪造/模拟),或将功能与伪造混在一起。
如果要进行集成测试,则可以在setUp中使用检查环境的前提条件,如果未正确设置某些内容,则可以跳过测试。
例如:
class TurretTest(unittest.TestCase):
def setUp(self):
self.turret_factory = TurretFactory()
self.turret = self.turret_factory.CreateTurret()
def test_turret_is_on_by_default(self):
self.assertEquals(True, self.turret.is_on())
def test_turret_turns_can_be_turned_off(self):
self.turret.turn_off()
self.assertEquals(False, self.turret.is_on())
假设您有一个包含10个测试的套件。其中8个测试共享相同的设置/拆卸代码。其他2个没有。
设置和拆卸提供了一种重构这8个测试的好方法。现在您如何处理其他两个测试?您可以将它们移动到另一个测试用例/套件。因此,使用设置和拆卸也有助于提供一种自然的方式将测试分解为案例/套件