我正在使用python-inject,python 2.6(带有 unittest2)。
我们有使用注入进行测试的类,以及也使用相同值的测试用例。我们目前使用 inject.appscope 来“单一化”这些值。否则,它们将按用户实例化。
import inject
class A(object):
'''shared data between many parts'''
...
class Foo(object):
'''uses a to do stuff'''
a = inject.attr('a', A)
def bar(self):
self.a.doStuff()
class TestFoo(TestCase):
a = inject.attr('a', A)
def setUp(self):
self.foo = Foo()
def testBar(self):
self.foo.bar()
self.assertTrue(self.a.stuffWasDone())
self.assertFalse(self.a.stuffWasDoneTwice())
def testBarTwice(self):
self.foo.bar()
self.foo.bar()
self.assertTrue(self.a.stuffWasDoneTwice())
injector = inject.Injector()
injector.bind(A, scope=inject.appscope)
inject.register(injector)
runTests()
理想情况下,我想在每次测试运行后重置 A,以避免交叉污染。(目前在 tearDown() 中执行 A.reset() 之类的操作..)
inject.reqscope
支持这样的东西(一组本地范围的实例),但我真的不知道在哪里调用register()
& unregister()
(重置注入对象缓存)。setUp()
在and中 Ot 为时已晚tearDown()
,因为 Foo.a 可能已经Foo.__init__()
为它们中的每一个调用了。
关于如何做到这一点的任何想法,或者我应该使用不同的方法?