私は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()
(インジェクションオブジェクトキャッシュをリセットする)をどこで呼び出すかは本当にわかりません。Foo.aがすでにそれぞれに呼び出されている可能性があるため、Otは遅すぎsetUp()
ます。tearDown()
Foo.__init__()
これを行う方法についてのアイデアはありますか、それとも別のアプローチを使用する必要がありますか?