4

私は Michael Foord のモック ライブラリを使用していますが、それについて質問があります。

プロパティをモックしたいので、これを行います:

eggs = mock.PropertyMock(return_value='eggs')
spam = mock.Mock()
type(spam).eggs = eggs
assert spam.eggs == 'eggs'

これは見事に機能します。しかし、私はそのtype()部分が醜いので、次のようなことをしたいと思っています:

eggs = mock.PropertyMock(return_value='eggs')
spam = mock.Mock(eggs = eggs)
assert spam.eggs == 'eggs'

最後の例は期待どおりに動作せずspam.eggs、プロパティではなくメソッドになります。


mock.Mock(eggs = 'eggs')メソッドではないので使用できることはわかっていますeggsが、プロパティをアサートできるようにしたいと考えています。:-)


私はPython 2.7を使用していますが、unittest.Mockうまくいくと思います。

4

1 に答える 1

5

パッチはある程度役立ちます。コードは公式のモックドキュメントから取得されます

>>> class Foo(object):
...     @property
...     def foo(self):
...         return 'something'
...     @foo.setter
...     def foo(self, value):
...         pass
...
>>> with patch('__main__.Foo.foo', new_callable=PropertyMock) as mock_foo:
...     mock_foo.return_value = 'mockity-mock'
...     this_foo = Foo()
...     print this_foo.foo
...     this_foo.foo = 6
...
mockity-mock
>>> mock_foo.mock_calls
[call(), call(6)]
于 2013-11-24T09:56:58.010 に答える