3

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コードが になるようにクラスをモンキーパッチすることは可能ですか?withnoop

たとえば、パッチ適用後の出力は次のようになります。

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)
4

2 に答える 2