いくつかの障害点がある機能があります。
def setup_foo(creds):
"""
Creates a foo instance with which we can leverage the Foo virtualization
platform.
:param creds: A dictionary containing the authorization url, username,
password, and version associated with the Foo
cluster.
:type creds: dict
"""
try:
foo = Foo(version=creds['VERSION'],
username=creds['USERNAME'],
password=creds['PASSWORD'],
auth_url=creds['AUTH_URL'])
foo.authenticate()
return foo
except (OSError, NotFound, ClientException) as e:
raise UnreachableEndpoint("Couldn't find auth_url {0}".format(creds['AUTH_URL']))
except Unauthorized as e:
raise UnauthorizedUser("Wrong username or password.")
except UnsupportedVersion as e:
raise Unsupported("We only support Foo API with major version 2")
関連するすべての例外がキャッチされていることをテストしたいと思います (ただし、現在はうまく処理されていません)。
私は合格する最初のテストケースを持っています:
def test_setup_foo_failing_auth_url_endpoint_does_not_exist(self):
dummy_creds = {
'AUTH_URL' : 'http://bogus.example.com/v2.0',
'USERNAME' : '', #intentionally blank.
'PASSWORD' : '', #intentionally blank.
'VERSION' : 2
}
with self.assertRaises(UnreachableEndpoint):
foo = osu.setup_foo(dummy_creds)
しかし、AUTH_URL が実際に有効な/到達可能な URL であるとテスト フレームワークに信じさせるにはどうすればよいでしょうか?
のモッククラスを作成しましたFoo
:
class MockFoo(Foo):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
私の考えは、呼び出しをモックし、例外を発生setup_foo
させることの副作用を取り除くことです。withに副作用を追加するUnreachableEndpoint
方法は知っていますが、それらを削除するにはどうすればよいですか?Mock
unittest.mock