oslo_concurrency.fixture.lockutils

class oslo_concurrency.fixture.lockutils.ExternalLockFixture

基础: Fixture

配置 lock_path,以便在单元测试中使用外部锁。

创建一个临时目录来保存文件锁,并将 oslo.config lock_path 选项设置为使用它。这可以在每个测试的基础上启用外部锁定,而不是通过 OSLO_LOCK_PATH 环境变量全局启用。

示例

def test_method(self):
    self.useFixture(ExternalLockFixture())
    something_that_needs_external_locks()

或者,可以将 useFixture 调用放在测试类的 setUp 方法中,以便为类中的所有测试提供此功能。

在 0.3 版本中添加。

setUp()

准备 Fixture 以供使用。

不应覆盖此方法。具体的 fixture 应该实现 _setUp。仍然支持覆盖 setUp,但不推荐。

在 setUp 完成后,fixture 将具有一个或多个属性,这些属性可用于(具体取决于具体的子类)。

引发:

如果 _setUp 失败,则引发 MultipleExceptions。MultipleExceptions 中捕获的最后一个异常将是一个 SetupError 异常。

返回值:

None。

更改于 1.3:

覆盖 setUp 的建议已反转 - 在 1.3 之前,应该覆盖 setUp(),现在不应该覆盖。

更改于 1.3.1:

现在捕获 BaseException,并且只有 Exception 的子类才会被包装在 MultipleExceptions 中。

class oslo_concurrency.fixture.lockutils.LockFixture(name, lock_file_prefix=None)

基础: Fixture

外部锁定 fixture。

这个 fixture 基本上是带有 external 标志的 synchronized 装饰器的替代方案,以便 tearDowns 和 addCleanups 将包含在锁上下文中,用于测试之间的锁定。建议将 fixture 作为测试方法的第一行,如下所示

def test_method(self):
    self.useFixture(LockFixture('lock_name'))
        ...

或者,如果需要序列化类中的所有测试方法,则作为 setUp 中的第一行。

class TestCase(testtools.testcase):
    def setUp(self):
        self.useFixture(LockFixture('lock_name'))
        super(TestCase, self).setUp()
            ...

这是因为 addCleanups 放在一个 LIFO 队列中,该队列在测试方法退出后运行。(无论是通过完成还是引发异常)

setUp()

准备 Fixture 以供使用。

不应覆盖此方法。具体的 fixture 应该实现 _setUp。仍然支持覆盖 setUp,但不推荐。

在 setUp 完成后,fixture 将具有一个或多个属性,这些属性可用于(具体取决于具体的子类)。

引发:

如果 _setUp 失败,则引发 MultipleExceptions。MultipleExceptions 中捕获的最后一个异常将是一个 SetupError 异常。

返回值:

None。

更改于 1.3:

覆盖 setUp 的建议已反转 - 在 1.3 之前,应该覆盖 setUp(),现在不应该覆盖。

更改于 1.3.1:

现在捕获 BaseException,并且只有 Exception 的子类才会被包装在 MultipleExceptions 中。