小编zii*_*ima的帖子

在nosetests中有条件跳过TestCase装饰器

有没有办法TestCase使用nosetests基于自定义条件跳过整个?我的意思是unittest.skip*风格.

我试过了

import unittest

@unittest.skip("No reason")
class TestFoo(object):
    def test_foo(self):
        assert False
Run Code Online (Sandbox Code Playgroud)

我发现这个工作使用python <= 2.7.3(显然是偶然的),但在python 2.7.6中没有.

有没有鼻子测试方法,或者我必须创建自己的装饰器?

笔记:

  • 我们尝试了python 2.7.3,2.7.6和nosetests 1.1.2,1.3.0的所有组合.
  • 如果该类继承了unittest.TestCase它的作用,但这不是我需要的.
  • 它似乎在setUpClass加注时起作用SkipTest,但看起来很笨拙.
  • 我找到了nottest装饰器,但它没有将测试标记为跳过.

摘要

  • 更新20. 5. 2014:到目前为止,我还没有找到任何解决这个问题的方法,因此似乎唯一的选择是编写自定义装饰器.
  • 更新12. 6. 2014:我发现养SkipTestsetUpClass不是因为nosetests在某些情况下,一个好主意,不会teardownContext在这些情况下.如果涉及插件,这可能会产生不利影响.

python testing nose

13
推荐指数
2
解决办法
4693
查看次数

用类型值注释数据类类变量

我们有许多数据类,代表具有共同祖先的各种结果Result。然后,每个结果使用其自己的 子类提供其数据ResultData。但我们很难正确注释该案例。

我们想出了以下解决方案:

from dataclasses import dataclass
from typing import ClassVar, Generic, Optional, Sequence, Type, TypeVar


class ResultData:
    ...


T = TypeVar('T', bound=ResultData)


@dataclass
class Result(Generic[T]):
    _data_cls: ClassVar[Type[T]]
    data: Sequence[T]

    @classmethod
    def parse(cls, ...) -> T:
        self = cls()
        self.data = [self._data_cls.parse(...)]
        return self

class FooResultData(ResultData):
    ...

class FooResult(Result):
    _data_cls = FooResultData
Run Code Online (Sandbox Code Playgroud)

但它最近因 mypy error 停止工作ClassVar cannot contain type variables [misc]。它也反对 PEP 526,请参阅https://www.python.org/dev/peps/pep-0526/#class-and-instance-variable-annotations,我们之前错过了。

有没有办法正确注释这个案例?

python mypy python-dataclasses

5
推荐指数
1
解决办法
2652
查看次数

在插槽中使用weakref继承类

我试图在类上使用弱引用,在这些类上我使用插槽来节省一些内存,但无法创建派生类。

class A(object):
    __slots__ = ['__weakref__']

class B(A):
    __slots__ = A.__slots__ + ['foo']
#TypeError: Error when calling the metaclass bases
#    __weakref__ slot disallowed: either we already got one, or __itemsize__ != 0
Run Code Online (Sandbox Code Playgroud)

诀窍在哪里?我没有找到任何解决方案。我正在使用python 2.7.3。

python inheritance weak-references

3
推荐指数
1
解决办法
517
查看次数