单元测试面向外部的函数
Unit test an external facing function
我正在尝试为我的 Django 应用程序的外部 api 编写单元测试用例。我有一个名为 Dummy
的模型,其中包含两个字段 temp
和 content
。第三方调用以下函数来获取 content
字段。 temp
是索引唯一键。
@csrf_exempt
def fetch_dummy_content(request):
try:
temp = request.GET.get("temp")
dummy_obj = Dummy.objects.get(temp=temp)
except Dummy.DoesNotExist:
content = 'Object not found.'
else:
content = dummy_obj.content
return HttpResponse(content, content_type='text/plain')
我有以下单元测试用例。
def test_dummy_content(self):
params = {
'temp': 'abc'
}
dummy_obj = mommy.make(
'Dummy',
temp='abc',
content='Hello World'
)
response = self.client.get(
'/fetch_dummy_content/',
params=params
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'Hello World')
每次我 运行 测试用例,它进入 exception
和 returns Object not found.
而不是 Hello World
。进一步调试后,我发现来自视图函数内部请求对象的 temp
始终是 None
,即使我将它传递给 params
。
我可能遗漏了一些东西而无法弄清楚。测试这些功能的正确方法是什么。
There's no params
parameter for the get
或客户端上的任何其他功能,您可能会想到 data
.
response = self.client.get(
'/fetch_dummy_content/',
data=params
)
无论如何这是第二个参数,所以你也可以self.client.get('/fetch_dummy_content/', params)
。
任何未知参数都包含在环境中,这解释了为什么您没有收到使用错误名称的错误消息。
我正在尝试为我的 Django 应用程序的外部 api 编写单元测试用例。我有一个名为 Dummy
的模型,其中包含两个字段 temp
和 content
。第三方调用以下函数来获取 content
字段。 temp
是索引唯一键。
@csrf_exempt
def fetch_dummy_content(request):
try:
temp = request.GET.get("temp")
dummy_obj = Dummy.objects.get(temp=temp)
except Dummy.DoesNotExist:
content = 'Object not found.'
else:
content = dummy_obj.content
return HttpResponse(content, content_type='text/plain')
我有以下单元测试用例。
def test_dummy_content(self):
params = {
'temp': 'abc'
}
dummy_obj = mommy.make(
'Dummy',
temp='abc',
content='Hello World'
)
response = self.client.get(
'/fetch_dummy_content/',
params=params
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, 'Hello World')
每次我 运行 测试用例,它进入 exception
和 returns Object not found.
而不是 Hello World
。进一步调试后,我发现来自视图函数内部请求对象的 temp
始终是 None
,即使我将它传递给 params
。
我可能遗漏了一些东西而无法弄清楚。测试这些功能的正确方法是什么。
There's no params
parameter for the get
或客户端上的任何其他功能,您可能会想到 data
.
response = self.client.get(
'/fetch_dummy_content/',
data=params
)
无论如何这是第二个参数,所以你也可以self.client.get('/fetch_dummy_content/', params)
。
任何未知参数都包含在环境中,这解释了为什么您没有收到使用错误名称的错误消息。