解释测试用例中使用的“setUp”和“tearDown”Python方法

Posted

技术标签:

【中文标题】解释测试用例中使用的“setUp”和“tearDown”Python方法【英文标题】:Explain the "setUp" and "tearDown" Python methods used in test cases 【发布时间】:2011-10-14 20:12:44 【问题描述】:

除了setUp在调用测试方法之前立即调用和tearDown在它被调用之后立即调用之外,任何人都可以解释Python的setUptearDown方法的使用吗?

【问题讨论】:

【参考方案1】:

通常,您将所有先决步骤添加到 setUp,并将所有清理步骤添加到 tearDown。

您可以阅读更多示例here。

当定义了 setUp() 方法时,测试运行器将运行该方法 在每次测试之前。同样,如果定义了 tearDown() 方法,则 测试运行器将在每次测试后调用该方法。

例如,您有一个测试需要项目存在或特定状态 - 所以您将这些操作(创建对象实例、初始化数据库、准备规则等)放入 setUp。

你也知道每个测试都应该在它开始的地方停止——这意味着我们必须将应用程序状态恢复到它的初始状态——例如关闭文件、连接、删除新创建的项目、调用事务回调等等- 所有这些步骤都将包含在tearDown中。

所以这个想法是测试本身应该只包含要在测试对象上执行以获得结果的操作,而 setUp 和 tearDown 是帮助您保持测试代码干净和灵活的方法。

您可以为一堆测试创建 setUp 和 tearDown 并在父类中定义它们 - 这样您就可以轻松支持此类测试并更新常见的准备和清理。

如果您正在寻找一个简单的例子,请use the following link with example

【讨论】:

【参考方案2】:

您可以使用这些来分解测试套件中所有测试的通用代码。

如果您的测试中有很多重复的代码,您可以通过将此代码移动到 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())

【讨论】:

+1 因为 9 行代码就是我 100% 理解所需的全部内容。优雅,简洁的例子。老实说,这 9 行是我在页面上阅读的唯一内容,除了问题,这也是我的问题。你在代码示例之前用英语说了什么吗?这不是必需的!代码说明了一切!谢谢马特。 我不清楚这里如何演示“如果设置不正确则跳过测试”。还是那只是旁白?【参考方案3】:

假设您有一个包含 10 个测试的套件。 8 个测试共享相同的设置/拆卸代码。其他两个没有。

setup 和 teardown 为您提供了重构这 8 个测试的好方法。现在你如何处理其他 2 个测试?您会将它们移动到另一个测试用例/套件。因此,使用 setup 和 teardown 也有助于提供一种将测试分解为案例/套件的自然方式

【讨论】:

有时不希望将测试移动到另一个测试用例。在这种情况下,您可以使用设置/拆卸代码编写装饰器,并且只装饰所需的测试功能。 这绝不是问题的答案。 @gented 你同意与否,这个技巧很有帮助.. :)

以上是关于解释测试用例中使用的“setUp”和“tearDown”Python方法的主要内容,如果未能解决你的问题,请参考以下文章

在Spring Boot Junit测试用例中使用contextLoads方法有什么用?

是否可以为 Robot Framework 中所有测试用例中使用的最失败的关键字创建报告?

解决接口自动化数据依赖问题

Uiautomator--断言的使用

使用 Java 反射访问测试用例中的受保护方法

从 JUnit 测试用例中找不到资源文件