同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库
6.2 fixture
在单元测试中,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 fixturesimport 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。
请支持我们,让我们可以支付服务器费用。
使用微信支付打赏
