是否可以修补在另一个类中调用的方法?

我不知道如何在单元测试的类中模拟/修补方法。我考虑以下解决方法:

class A():
    def _get_datetime(self,days):
        return (datetime.now() + timedelta(days=days)).strftime('%Y-%m-%d')

    def do_something(self):
        date = self._get_datetime()

现在我在单元测试中有以下TestClass:

class TestClass():
    def test_one:
        # do some things here
        next_day = (datetime.now()).date()+relativedelta(days=+1)
        self._test_a(self._mocked_get_datetime(next_day))

    @patch('path.to.my.class.A','_get_datetime')
    def _test_a(self,mock_method):
        self.env['A'].do_something()

    def _mocked_get_datetime(self,date):
        return date

如何模拟A类中的_get_datetime()方法?

我想在测试环境中的A类的do_something()方法中定义使用的日期。有可能吗?

谢谢!!

sonybmw2007 回答:是否可以修补在另一个类中调用的方法?

这是使用patch.object模拟类_get_datetime的{​​{1}}方法的单元测试解决方案

A

a.py

import datetime from datetime import timedelta class A(): def _get_datetime(self,days): return (datetime.now() + timedelta(days=days)).strftime('%Y-%m-%d') def do_something(self): date = self._get_datetime() return date

test_a.py

带有覆盖率报告的单元测试结果:

import unittest
from unittest.mock import patch
from datetime import datetime
from a import A

next_day = datetime.now().date()


class TestClass(unittest.TestCase):
    @patch.object(A,'_get_datetime',return_value=next_day)
    def test_do_something(self,mock_get_datetime):
        a_instance = A()
        actual = a_instance.do_something()
        self.assertEqual(actual,next_day)
        mock_get_datetime.assert_called_once()


if __name__ == '__main__':
    unittest.main()

源代码:https://github.com/mrdulin/python-codelab/tree/master/src/stackoverflow/58857424

本文链接:https://www.f2er.com/3102431.html

大家都在问