【发布时间】:2011-08-06 05:57:23
【问题描述】:
我正在从事的项目是一个以 Python 包形式包装的业务逻辑软件。这个想法是各种脚本或应用程序将导入它,初始化它,然后使用它。
它目前有一个顶级的 init() 方法来进行初始化并设置各种东西,一个很好的例子是它使用数据库连接设置SQLAlchemy 并存储 SA 会话以供以后访问。它被存储在我的项目的子包中(即 myproj.model.Session,因此其他代码在导入模型后可以获得有效的 SA 会话)。
长话短说,这使我的包成为一个有状态的包。我正在为该项目编写单元测试,这种工作人员的行为带来了一些问题:
- 应该隔离测试,但我的包的内部状态打破了这种隔离
- 我无法测试 main init() 方法,因为它的行为取决于状态
- 未来的测试将需要针对具有众所周知的模型状态(例如预填充的sqlitein-memory db)的(尚未编写的)控制器部分运行
我是否应该以某种方式重构我的包,因为当前结构不是最佳(可能)实践(tm)? :)
我应该把它留在那里,每次都设置/拆除整个东西吗?如果我要实现完全隔离,这意味着在每次测试中完全擦除并重新填充数据库,这不是矫枉过正吗?
这个问题实际上是关于整体代码和测试结构的,但是为了我的测试,我使用nose-1.0 是值得的。我知道Isolate plugin 可能对我有帮助,但我想在测试套件中做奇怪的事情之前得到代码。
【问题讨论】:
标签: python unit-testing state code-structure