我有一个 python 项目,它使用 GitPython 对远程 Git 存储库执行克隆和拉取功能。
举个简单的例子:
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)
Run Code Online (Sandbox Code Playgroud)
我希望能够为这个函数编写一个单元测试,但显然这需要接触当前的外部系统。
我很好奇是否有人有模拟这种外部交互的经验,其方式类似于使用 Mock 来模拟 HTTP 调用。我希望能够以一种可以在测试时模拟的方式执行这些任务,而无需调用实际的 Git 远程。
我应该如何为此编写测试?
编辑:为了更清楚地了解我的要求,我应该提到我是 Mock 的新手,并且正在努力理解如何 Mock 这些类的实例而不是类本身。我的问题应该表述得更好 - 类似于“如何使用 Mock 来设置实例特定的属性,例如裸露?”
从那以后,我对 Mock …
我正在创建一个非常简单的python脚本,旨在打开TCP套接字并发送一些JSON数据.(我是python的新手)
我在运行脚本时收到以下错误:
Traceback (most recent call last):
File "JSONTest.py", line 17, in <module>
s.connect('10.12.0.30', 6634)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
TypeError: connect() takes exactly one argument (2 given)
Run Code Online (Sandbox Code Playgroud)
我的脚本如下:
#Imports
import socket
import json
import time
data = "{\"method\": \"echo\",\"id\": \"echo\",\"params\": []}"
#Create socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Establish TCP session via IP address and port specified
s.connect('10.12.0.30', 6634)
#Send JSON to socket
s.send(json.dumps(data))
#Wait for response and print to console
result = json.loads(s.recv(1024))
#print str(result)
#Exit …Run Code Online (Sandbox Code Playgroud) 假设我有一个包含以下内容的JSON结构:
{
"ROWS": [{
"name": "Greg",
"age": "24",
},
{
"name": "Tom",
"age": "53",
}]
}
Run Code Online (Sandbox Code Playgroud)
键"ROWS"的值是一个词典列表,对吧?
好吧,如果我只有一个条目呢?是否仍然适合使用列表表示法,即使该列表只有一个元素?
{
"ROWS": [{
"name": "Greg",
"age": "24",
}]
}
Run Code Online (Sandbox Code Playgroud)
我有什么理由不这样做吗?