【发布时间】:2011-12-19 15:23:32
【问题描述】:
我希望在工作中的大量基于 Python 的项目中开始使用 DBC,并且想知道其他人使用它有什么经验。到目前为止,我的研究结果如下:
- http://www.python.org/dev/peps/pep-0316/ - PEP 316 应该通过合同对 Python 的设计进行标准化,但已被推迟。此 PEP 建议使用文档字符串。
- http://www.wayforward.net/pycontract/ - Python 合约。这似乎是一个使用文档字符串的完整但未维护的框架。
- http://www.nongnu.org/pydbc/ - PyDBC 使用元类实现合约。几年也没有维护。
我的问题是:您是否将 DBC 与 Python 一起用于成熟的生产代码?它的效果如何/值得付出努力吗?您会推荐哪些工具?
【问题讨论】:
-
请注意,您可以只从 TestCase 继承,并在任何类中包含单元测试。
-
对,但是 DBC 有点不同,它会在生产环境和所有数据输入上运行检查。据我了解,单元测试是具有预定义数据集的运行时断言,而 DBC 是具有所有输入的高于级别的断言。具体来说,我认为在我的案例中使用 DBC 是有意义的,因为很多代码确实是状态繁重的,并且经常必须从具有频繁更改模式和相当复杂的关系的外部 DB 获取状态,这些关系非常混乱,难以模拟.
-
契约式设计是您明确指定每段代码符合的规范的地方。您不必在运行时对其进行全面测试。单元测试可以是那个规范,就像其他任何东西一样。 TDD 是一种使用单元测试的不同方式,在这种情况下可以对一组预期的行为进行建模。
-
我明白这一点。在我的情况下,TDD 有点混乱:从一个,有时是两个外部数据库中提取数据,其中大量数据以意想不到的方式相关并且不能轻易模拟。似乎 DBC 可能更合适,不必担心模拟数据不再是问题。
-
哦,绝对!一个不能替代另一个。我只是想弄清楚下一步我们的努力方向,似乎 DBC 将在这一点上提供更大的投资回报率。当然,单元测试和 DBC 不会相互排斥,并且会一起有效。