我刚刚了解了python的描述符,我认为它们可能只是解决我遇到的问题的方法。我想为我写的描述符类编写测试,我发现another post有一些示例代码,但我真的不明白它。
import unittest
class MockClass(object):
# add any methods to assert access here
class DescriptorTests(unittest.TestCase):
def _make_one(self, *args, **kw):
from original_module import DescriptorClass
return DescriptorClass(*args, **kw)
def test_class_access(self):
# only a type is passed in, no instance
desc = self._make_one()
res = desc.__get__(None, MockClass)
self.assertEqual(res.someattribute, 'somevalue')
# etc.
if __name__ == '__main__':
unittest.main()
两个问题。首先,MockClass
的目的是什么?我只是写了
class MockClass(object):
pass
并且测试似乎有效。 MockClass
是否需要具备任何功能?
第二,DescriptorTests._make_one
方法的目的是什么?为什么不在DescriptorClass
之后立即导入unittest
,然后在DescriptorTests.test_class_access
内创建描述符的实例,如下所示:
import unittest
from original_module import DescriptorClass
class DescriptorTests(unittest.TestCase):
def test_class_access(self):
desc = DescriptorClass()
# other code
提前致谢。
我正在编写一个模拟物理现象的程序,所以我编写的类需要几个像物理属性一样的公共数据属性。例如,我的类需要一个temperature
属性,以开尔文的形式存储对象的温度。以开尔文为单位的温度负值是没有意义的。其他物理特性具有类似的约束(质量的负值没有意义,等等)。我没有编写一堆基本相同的@property
,而是将这个功能抽象为描述符类。
我编写了一个PhysicalProperty
描述符类,它应该在实例化时采用下限,如果用户尝试将值设置为小于下限,则引发异常。我想测试PhysicalProperty
以确保它适当地抛出异常。
答案 0 :(得分:0)
我不认为描述符适用于此处,我认为您应该考虑使用模拟框架来代替此类测试。对于Python,有Mox库。要了解如何使用Mox模拟属性,请参阅this question。
此技术称为依赖注入(有关详细信息,请参阅Wikipedia,SO和Martin Fowler。
我编写了一个
PhysicalProperty
描述符类,它应该在实例化时采用下限,如果用户尝试将值设置为小于下限,则引发异常。我想测试PhysicalProperty
以确保它适当地抛出异常。
您可以验证通过子类化unittest.TestCase
提供的assertRaises()
或assertRaisesRegexp()
方法抛出异常,就像您在代码中已经做过的那样。