test resources,管理昂贵测试资源的pyunit扩展
testresources的Python项目详细描述
测试资源
testresources使用一个干净简单的api扩展unittest以提供测试 优化测试用例需要昂贵的公共资源 VCS系统的示例工作树,参考数据库 企业应用程序或Web服务器…让想象力尽情发挥。
要生成的依赖项/自测试
- python 2.6+(或3.3+)
- 文件
- 测试工具(http://pypi.python.org/pypi/testtools/" rel="nofollow">http://pypi.python.org/pypi/testtools/)
- 固定装置( http://pypi.python.org/pypi/fixtures )
使用测试资源的依赖项
- python 2.6+(或3.3+)
对于较旧版本的python,testresources<;=1.0.0支持2.4、2.5和 3.2、
testresources如何工作
testresources的基本思想是:
- 测试在 resources 属性中声明它们需要的资源。
- 运行测试时,将分配所需的资源对象(或者 新构建或重用),并分配给测试用例的属性。
testresources区分了"资源管理器"(resource manager)的一个子类 testresourcemanager )作为一种工厂和"资源" 它可以是从manager类的 获取资源 方法。
资源不是干净就是肮脏。干净意味着他们在 所有重要的方法作为一个新构建的实例,因此它们可以 安全重复使用。
此时,testresources与setupclass和setupmodule不兼容- 当一个优化测试套件被一个测试套件包围时 功能,结果将被展平以进行优化,并且这些设置将 根本不运行。
主要类别
测试资源.资源测试用例
通过在这个类中扩展或混合,测试可以有必要的资源 自动分配、处置或回收。
resourcetestcase可以用作测试的基类,完成后 测试将自动检查其资源属性 通过优化测试套件和它们自己的setup()和teardown()获得的资源 方法。(这允许测试保持功能,而不需要这个特定的 作为容器的testsuite)。或者,可以调用setupresources(self, 资源,测试结果)和拆卸资源(自我,资源,测试结果) 从你自己的类设置和拆卸和相同的行为将是 已激活。
要声明资源的使用,请将 resources 属性设置为 的元组(属性名,资源管理器)
在安装过程中,对于每个声明的需求ent,测试获得一个属性 指向分配的资源,这是调用 资源管理器.getresource() 。 将对每个 拆卸期间的资源()。
例如:
class TestLog(testresources.ResourcedTestCase): resources = [('branch', BzrPopulatedBranch())] def test_log(self): show_log(self.branch, ...)
testresources.testresourcemanager
testresourcemanager是一个对象,测试可以使用它来创建资源。它 可以重写以管理不同类型的资源。正常测试代码 不需要对其调用任何方法,因为这将由 测试资源机械。
当实现一个新的testresourcemanager子类时,您应该考虑 重写这些方法:
< DL>必须在每个具体子类中重写。
返回资源对象的新实例 (实际的资源,而不是testresourcemanager)。不用担心 再利用,这是单独处理的。只有当 肯定需要新的资源。
make 由getresource调用;通常不需要重写 后者。
例如:
class TemporaryDirectoryResource(TestResourceManager): def clean(self, resource): shutil.rmtree(resource) def make(self): return tempfile.mkdtemp() def isDirty(self, resource): # Can't detect when the directory is written to, so assume it # can never be reused. We could list the directory, but that might # not catch it being open as a cwd etc. return True
testresourcemanager对象上的 resources 列表用于声明 依赖关系。例如,需要临时目录的数据库资源 可以用资源列表声明:
class DataBaseResource(TestResourceManager): resources = [("scratchdir", TemporaryDirectoryResource())]
最重要的是,两个getresources到同一个testresourcemanager,没有 在中间调用finishedWith,将返回相同的对象,只要它是 不脏。
当测试具有依赖项并且该依赖项成功完成时,但是 返回none,框架不 不 认为这是一个错误:确保始终 返回有效资源,或引发错误。错误处理并不严重 已执行,但此区域的任何错误都将立即处理。
可以在doc/文件夹中找到一个示例testresourcemanager。
有关详细信息,请参阅pydoc testresources.testresourcemanager。
测试资源.通用资源
粘附以使测试资源适应现有资源(如类)。
测试资源.固定资源
粘合以使测试资源适应更简单的fixture.fixture API。长 术语testresources很可能会在更简单的api上整合为 推荐的资源编写方法。
测试资源。优化测试套件
这个测试套件将直接内省它拥有的所有测试用例,如果 它们声明所需的资源,将按以下顺序运行测试 尽量减少所需的安装和拆卸次数。它试图达到 这是通过在测试序列周围调用getResource()和finishedWith()实现的 使用特定资源的。
测试通常会添加到优化测试套件中。任何标准库 testsuite对象将被展平,而任何自定义的testsuite子类 将在其成员测试中分发。这意味着任何习俗 测试套件中的逻辑应该被保留,代价是 优化。
因为测试套件进行了优化,所以您可以控制 优化这一点通过向单个 优化测试套件。你可以把所有东西都添加到一个优化测试套件中, 得到全局优化,或者你可以使用几个更小的 优化测试套件。
testresources.testloader
这是一个简单的测试加载器,默认情况下会创建优化的测试套件。
单元测试.测试结果
testresources将有关资源创建和销毁的活动记录到 使用运行结果对象测试。寻找6种扩展方法: 开始清理资源 , 停止清理资源 , 开始清理资源 , 最后是stopResetResource。 testresources.tests.resultWithResourceExtensions是 有这些方法的测试结果示例。
控制资源重用
何时或如何标记资源被污染?
最简单的方法是让testresourcemanager.make 调用self.dirtied : 资源总是立即变脏,如果不首先 正在重置。当底层资源便宜到 重置或重新创建,或当很难检测到它是否被弄脏或 改变它的陷阱操作。
或者,重写testresourcemanager.isDirty并检查资源 看看重复使用是否安全。
最后,您可以安排返回的资源始终回拨到 testresourcemanager.dirtied 关于第一个变异它的操作。
FAQ
我可以在测试方法中动态请求资源吗?
一般来说,不,你不应该这样做。我们的想法是资源是 静态声明,以便testresources可以"平滑"跨 几个测试。
但是,您可以找到一些静态声明和可重用的对象。 充当资源,然后提供生成子元素的方法 在一次测试中。
如果资源保存在testresourcemanager对象中,并且 testresourcemanager通常是在测试用例中内联构建的 资源 属性,如何在不同的测试中共享它们 课堂?
好问题。
我想你应该安排一个单独的案子 模块作用域,然后由要共享它的测试类引用。
释放
- 在新闻中添加一节(在开发中之后)。
- git标记-s
- python setup.py sdist bdist_wheel upload-s < > >