我希望有一个鼻子插件,如果启用它将只生成一个HTML页面,其中运行的所有测试都包含每个测试的请求/响应。
这对于从测试中生成一些文档很有用。
现在我觉得它太难了,但为了做到这一点,我想我必须拦截self.client.get / post /无论什么方法。 要做到这一点,看起来我必须用其他东西替换默认的TestCase类,并且我不想强制任何想要使用此工具的项目必须这样做。
这种作品例如
import json
from mock import patch
from django.core.urlresolvers import reverse
from django.test import TestCase
from django.test.client import Client
class DebuggingClient(Client):
def __init__(self, *args, **kwargs):
super(DebuggingClient, self).__init__(*args, **kwargs)
def get(self, url, *args, **kwargs):
print("Calling endpoint {} with args {} and kwargs {}".format(url, args, kwargs))
response = super(DebuggingClient, self).get(url, *args, **kwargs)
print("Obtained response {}:{}".format(response.status_code, response.content))
return response
class TestSimpleApi(TestCase):
# TODO: how do I make this happen inside the plugin??
def _pre_setup(self):
super(TestSimpleApi, self)._pre_setup()
self.client = DebuggingClient()
def test_getting_numbers_returns_list_of_first_numbers(self):
url = reverse('gen_numbers')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
data = json.loads(response.content)
self.assertEqual(data, list(range(10)))
但我想这样做只是取决于启用了鼻子插件。 知道怎么样?我无法从鼻子插件中找到改变基类的方法(除非做一些疯狂的猴子修补)。 即使远离工作,该项目仍然在这里..