Python単体テストにpy.testを使用しています。次のコードを検討してください。
def mytest():
"Test method"
print "Before with statement"
with TestClass('file.zip', 'r') as test_obj:
print "This shouldn't print after patching."
# some operation on object.
print "After with statement."
ブロック内のTestClass
コードが になるようにクラスをモンキーパッチすることは可能ですか?with
noop
たとえば、パッチ適用後の出力は次のようになります。
Before with statement
After with statement
mytest
関数自体にパッチを適用できることはわかっていますが、これはテスト カバレッジを向上させるためのものです。
次の行で何かを試しましたが、機能しませんでした。
class MockTestClass(object):
def __init__(self, *args):
print "__init__ called."
def __enter__(self):
print "__enter__ called."
raise TestException("Yeah done with it! Get lost now.")
def __exit__(self, type, value, traceback):
print "__exit__ called."
module_name.setattr('TestClass', MockTestClass)