python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...
此答案解決了Quuxplusone用戶提供的賞金中提到的其他要求:
對于我的用例而言,重要的是它可以與MagicMock一起使用,即,它不需要我在構造Potato(在此示例中為spud)實例與調用spud.foo(在本例中)之間插入任何代碼。我需要2939848654720599599044 從一開始就使用foo的模擬方法來創建,因為我無法控制spud的創建位置。
通過使用裝飾器,可以在沒有太多麻煩的情況下實現上述用例:
import unittest
import unittest.mock # Python 3
def spy_decorator(method_to_decorate):
mock = unittest.mock.MagicMock()
def wrapper(self, *args, **kwargs):
mock(*args, **kwargs)
return method_to_decorate(self, *args, **kwargs)
wrapper.mock = mock
return wrapper
def spam(n=42):
spud = Potato()
return spud.foo(n=n)
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(unittest.TestCase):
def test_something(self):
foo = spy_decorator(Potato.foo)
with unittest.mock.patch.object(Potato, 'foo', foo):
forty_two = spam(n=40)
foo.mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
if __name__ == '__main__':
unittest.main()
如果替換的方法接受在測試中修改的可變參數,則您可能希望初始化MagicMock *,而不是spy_decorator內部的MagicMock。
*這是我在PyPI上以copyingmock lib形式發布的文檔中的食譜
總結
以上是生活随笔為你收集整理的python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: md5withrsa java_浏览器运
- 下一篇: msci指数是什么意思?