假设我有一个方法为test_database_inaccessible()
的测试类TestSuite。我想在另一个类中测试方法run()
,AA_database.run()
调用is_primary()
。我可以模拟is_primary返回True。
我尝试过
with patch.object(AADatabase, "is_primary") as is_primary_mocked:
self.dbsize = 2.1e10
self.returncode = 2
is_primary_mocked.return_value = True
self.AADatabase.run()
但我知道
AttributeError:“ TestSuite”对象没有属性“ AADatabase”
以前,我只是尝试过
with patch.object(AADatabase, "is_primary") as is_primary_mocked:
self.dbsize = 2.1e10
self.returncode = 2
is_primary_mocked.return_value = True
AADatabase.run()
但是我得到了不同的错误消息。
如果补丁在这里是错误的工具,那么我不介意切换到其他工具。我尝试了很多不同的方法。
答案 0 :(得分:1)
这是基于您提供的代码的单元测试解决方案。
main.py
:
class AADatabase:
@classmethod
def is_primary(cls):
return False
@classmethod
def run(cls):
return cls.is_primary()
test_main.py
:
import unittest
from main import AADatabase
from unittest.mock import patch
class TestAADatabase(unittest.TestCase):
def test_database_inaccessible(self):
with patch.object(AADatabase, 'is_primary') as is_primary_mocked:
is_primary_mocked.return_value = True
res = AADatabase.run()
self.assertTrue(res)
if __name__ == '__main__':
unittest.main()
带有覆盖率报告的单元测试结果:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------
src/stackoverflow/58862981/main.py 5 1 80% 4
src/stackoverflow/58862981/test_main.py 11 0 100%
-----------------------------------------------------------------------
TOTAL 16 1 94%
源代码:https://github.com/mrdulin/python-codelab/tree/master/src/stackoverflow/58862981