我有一个使用GitPython对远程Git仓库执行克隆和拉取功能的Python项目。
例如,一个简单的示例:
我希望能为这个函数编写一个单元测试,但显然,目前这需要与外部系统进行交互。
我想知道是否有人有模拟外部交互的经验,类似于使用Mock模拟HTTP调用。我希望能以一种可以在测试时被模拟且不需要调用实际Git远程的方式执行这些任务。
我应该如何为此编写测试?
编辑:为了更清楚地表述我的问题,我应该提一下我对Mock不熟悉,并且很难理解如何模拟这些类的实例而非类本身。我的问题应该更好地表达为“如何使用Mock设置特定于实例的属性,例如bare?”
我已经学到了很多关于Mock的知识,并且已经找到了如何做到这一点的方法,所以我将回答自己的问题。
例如,一个简单的示例:
import git
from git import Git
from git import Repo
def clone_and_checkout(full_dir, git_url, repo_ver):
repo = Repo.clone_from(
url=git_url,
to_path=full_dir
)
# Trigger re-create if repository is bare
if repo.bare:
raise git.exc.InvalidGitRepositoryError
# Set origin and pull
origin = repo.remotes.origin
origin.pull()
# Check out desired version of repository
g = Git(full_dir)
g.checkout(repo_ver)
我希望能为这个函数编写一个单元测试,但显然,目前这需要与外部系统进行交互。
我想知道是否有人有模拟外部交互的经验,类似于使用Mock模拟HTTP调用。我希望能以一种可以在测试时被模拟且不需要调用实际Git远程的方式执行这些任务。
我应该如何为此编写测试?
编辑:为了更清楚地表述我的问题,我应该提一下我对Mock不熟悉,并且很难理解如何模拟这些类的实例而非类本身。我的问题应该更好地表达为“如何使用Mock设置特定于实例的属性,例如bare?”
我已经学到了很多关于Mock的知识,并且已经找到了如何做到这一点的方法,所以我将回答自己的问题。
Mock
- 你尝试过吗? - jonrsharpe