返回介绍

6.2 fixture

发布于 2024-01-23 21:41:46 字数 1120 浏览 0 评论 0 收藏 0

在单元测试中,fixture表示“测试前创建,测试后销毁”的(辅助性)组件。比较好的方式是为它们构建一个特殊的组件,因为它们会在许多不同的地方被重用。例如,如果你需要一个对象来表示你的应用程序的配置状态,很可能你希望在每个测试前初始化它,并在测试结束后将其重置为默认值。对临时文件创建的依赖也需要该文件在测试开始前被创建,测试结束后被删除。

unittest只为我们提供了已经提及的setUp和tearDown函数。不过,是有机制可以hook这两个函数的。fixtures(https://pypi.python.org/pypi/fixtures)Python模块(并非标准库的一部分)提供了一种简单的创建fixture类和对象的机制,如useFixture方法。

fixtures模块提供了一些内置的fixture,如fixtures.EnvironmentVariable,对于在os.environ中添加或修改变量很有用,并且变量会在测试退出后重置,如示例6.5所示。

示例6.5 使用fixtures.EnvironmentVariable

import fixtures
import os

class TestEnviron(fixtures.TestWithFixtures):
  def test_environ(self):
    fixture = self.useFixture(
      fixtures.EnvironmentVariable("FOOBAR", "42"))
    self.assertEqual(os.environ.get("FOOBAR"), "42")

  def test_environ_no_fixture(self):
    self.assertEqual(os.environ.get("FOOBAR"), None)

当你发现类似的通用模式时,最好创建一个fixture,以便它可以被你的所有其他测试用例重用。这极大地简化了逻辑,并且能准确地体现你在测试什么以及以何种方式测试。

注意

本节的示例代码之所以没有用unittest.TestCase,是因为fixtures.TestWith-Fixtures继承自unittest.TestCase。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文