我有一个棘手的问题,我似乎无法掌握.我目前正在为django自定义auth-backend编写单元测试.在我们的系统上,我们实际上有两个后端:一个是内置的django后端和一个自定义后端,它向基于Java的API发送请求,该API以XML的形式返回用户信息.现在,我正在编写单元测试,所以我不想在系统之外发送请求,我不是要尝试测试Java API,所以我的问题是如何解决这个问题并模拟副作用以最强大的方式.
我正在测试的函数是这样的,其中url设置值只是Java服务器的基本URL,用于验证用户名和密码数据并返回xml,服务值只是构建url查询的一些魔力,它对我们不重要:
@staticmethod
def get_info_from_api_with_un_pw(username, password, service=12345):
url = settings.AUTHENTICATE_URL_VIA_PASSWORD
if AUTH_FIELD == "username":
params = {"nick": username, "password": password}
elif AUTH_FIELD == "email":
params = {"email": username, "password": password}
params["service"] = service
encoded_params = urlencode([(k, smart_str(v, "latin1")) for k, v in params.items()])
try:
# get the user's data from the api
xml = urlopen(url + encoded_params).read()
userinfo = dict((e.tag, smart_unicode(e.text, strings_only=True))
for e in ET.fromstring(xml).getchildren())
if "nil" in userinfo:
return userinfo
else:
return None
Run Code Online (Sandbox Code Playgroud)
因此,我们获取xml,将其解析为dict,如果key nil存在,那么我们可以返回dict并继续执行happy and authenticated.显然,一个解决方案就是找到一种方法以某种方式覆盖或monkeypatch …