想象一下,我有一个简单的“不可变的最佳”结构类:
class Foobar(object):
__slots__ = ('_foo', '_bar')
def __init__(self, *, foo, bar):
self._foo = foo
self._bar = bar
foo = property(lambda self: self._foo)
bar = property(lambda self: self._bar)
def woof(self):
return self._foo + self._bar
我可以考虑这些明显的测试来测试这个类:
Foobar(foo=-20, bar=62).foo == -20
Foobar(foo=-20, bar=62).bar == 62
Foobar(foo=-20, bar=62).woof() == 42
Foobar(foo=-20, bar=62).foo = 314
应该抛出AttributeError
Foobar(foo=-20, bar=62).bar = 314
应该抛出AttributeError
然而,这些测试仅考虑了快乐案例。但是当它归结为测试不成功时,我被困住了:
woof()
不接受参数吗?foo
和bar
的每种可能组合?如果我应该,如何选择类型到那个集合?“环境响应”是指隐式工作运行时对代码的影响。当给出不足/无关的参数时,不是我的代码直接抛出TypeError
,而是基于我的代码进行运行时检查。
通过强制执行类型列表的笛卡尔积,我的意思是尝试以下:
Foobar(foo=0, bar=0 ).woof()
Foobar(foo=0, bar=None ).woof()
Foobar(foo=0, bar=lambda: 0).woof()
Foobar(foo=0, bar=() ).woof()
Foobar(foo=0, bar=(10, ) ).woof()
Foobar(foo=0, bar="" ).woof()
Foobar(foo=0, bar="test" ).woof()
Foobar(foo=0, bar=True ).woof()
...
Foobar(foo=None, bar=0 ).woof()
Foobar(foo=None, bar=None ).woof()
Foobar(foo=None, bar=lambda: 0).woof()
Foobar(foo=None, bar=() ).woof()
Foobar(foo=None, bar=(10, ) ).woof()
Foobar(foo=None, bar="" ).woof()
Foobar(foo=None, bar="test" ).woof()
Foobar(foo=None, bar=True ).woof()
...
Foobar(foo=lambda: 0, bar=0 ).woof()
Foobar(foo=lambda: 0, bar=None ).woof()
Foobar(foo=lambda: 0, bar=lambda: 0).woof()
Foobar(foo=lambda: 0, bar=() ).woof()
Foobar(foo=lambda: 0, bar=(10, ) ).woof()
Foobar(foo=lambda: 0, bar="" ).woof()
Foobar(foo=lambda: 0, bar="test" ).woof()
Foobar(foo=lambda: 0, bar=True ).woof()
...
答案 0 :(得分:0)
一般来说,我说不。 Python的一个主题是"我们在这里负责所有用户"。
您应该测试不合规格用途的唯一时间是,如果您能够为用户提供强大的理由,希望该功能能够正常运行。在这种情况下,你也应该考虑实施这种行为 - 毕竟是预期的。