我有一个类,它有一个函数,可以在git仓库中添加未暂存的更改并提交它们
def commit_local_changes(self, repo_path):
repo = Repo(repo_path)
changed_files = repo.git.diff(None, name_only=True).splitlines()
if changed_files:
for file in changed_files:
repo.git.add(file)
repo.git.commit("-m", "some commit message")
return repo.head.object.hexsha
我正在尝试编写单元测试来检查这个功能,我希望repo.git.diff(None, name_only=True)
实际上返回除了mock之外的东西。我试着这样设置测试:
@patch("myModule.Repo")
def test_commit_local_changes(self, mock_repo):
mock_repo.return_value
.git.return_value
.diff.return_value = 'file1\nfile2'
但是当我在main方法中打印changed_files
并调用mock时,我看到它只是一些MagicMock:
<MagicMock name='Repo().git.diff().splitlines()' id='140551053340304'>
1条答案
按热度按时间gopyfrb31#
我的问题是对Python的属性mocking和函数结果的返回值缺乏理解。
在我的例子中,Repo()是一个创建类Repo示例的函数(python可能有不同的名称,我更熟悉Java)。所以我需要模拟Repo()的返回值,然后Python会为我模拟它的属性,然后我需要模拟diff()调用的返回值。以下方法起作用: