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调用;通常不需要重写 后者。

清洁
清除现有资源实例,例如通过删除目录或 关闭网络连接。默认情况下,这不起作用,可能是 适用于自动垃圾回收的资源。
复位
将不再使用的脏资源重置为干净状态。默认情况下 只是丢弃它并创建一个新的,但是对于某些资源来说 更快地重置它们。
IsDirty
检查现有资源是否脏。默认情况下,这只是报告 是否调用了testresourcemanager.dirtied或 依赖关系资源已损坏。

例如:

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通常是在测试用例中内联构建的 资源 属性,如何在不同的测试中共享它们 课堂?

    好问题。

    我想你应该安排一个单独的案子 模块作用域,然后由要共享它的测试类引用。

释放

  1. 在新闻中添加一节(在开发中之后)。
  2. git标记-s
  3. python setup.py sdist bdist_wheel upload-s
  4. < > >

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误