Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Django-对AdminForm进行单元测试_Python 2.7_Django Admin_Tdd_Django Testing_Django Unittest - Fatal编程技术网

Python 2.7 Django-对AdminForm进行单元测试

Python 2.7 Django-对AdminForm进行单元测试,python-2.7,django-admin,tdd,django-testing,django-unittest,Python 2.7,Django Admin,Tdd,Django Testing,Django Unittest,我对单元测试非常陌生,可能做了一些错误的事情,但是当我通过管理后端模拟一篇文章来更新模型时,似乎没有调用AdminForm中的save\u model方法。我正在尝试测试这个方法——我做错了什么 我的第二个不太相关的问题是,一般来说,当我使用单元测试时,如何确保调用方法?有没有办法列出所有被击中的方法 下面是我的测试正在运行的代码。在这个模型的AdminForm中的save\u model方法中,我将这个模型的foobar属性设置为当前登录用户的用户名。以下是我的测试: self.client

我对单元测试非常陌生,可能做了一些错误的事情,但是当我通过管理后端模拟一篇文章来更新模型时,似乎没有调用AdminForm中的
save\u model
方法。我正在尝试测试这个方法——我做错了什么

我的第二个不太相关的问题是,一般来说,当我使用单元测试时,如何确保调用方法?有没有办法列出所有被击中的方法

下面是我的测试正在运行的代码。在这个模型的AdminForm中的
save\u model
方法中,我将这个模型的
foobar
属性设置为当前登录用户的用户名。以下是我的测试:

self.client = Client()
self.client.login(username='username',password='password')
# self.dict is a dictionary of field names and values for mymodel to be updated
response = self.client.post('/admin/myapp/mymodel/%d/' % self.mymodel.id, self.dict)
self.assertEqual(response.status_code,200) # passes
self.assertEqual(self.mymodel.foobar,'username') # fails
self.client.logout()

它失败是因为它说
self.mymodel.foobar
是一个空字符串。这就是更新之前的情况。在
self.dict
中没有传递foobar的值,但是我的
save\u model
方法被设计为在更新发生时自行设置它。另外值得注意的是,我的代码工作正常,
save\u model
似乎工作正常,只是我的测试失败了。因为我在TDD是一个彻头彻尾的傻瓜,我确信问题在于我的测试,而不是我的代码。想法?

从代码看,问题似乎是,在发布表单后,您没有从数据库重新加载
self.mymodel
。如果持有对存储在数据库中的模型对象的引用,并且该对象上的一个或多个字段在数据库中发生了更改,则需要从数据库重新加载该对象以查看更新的值。如中所述,您可以通过以下方式完成此操作:

self.mymodel = MyModelClass.objects.get(id=self.mymodel.id)
要回答第二个问题,查看发生了什么最有用的方法可能是使用日志记录来输出
save\u model
方法中发生的事情-这不仅有助于您在测试期间调试问题,而且在运行应用程序时,如果您在该方法中遇到任何问题,也会有帮助。django日志指南提供了一个很好的介绍:


有道理。我最终选择了一种不同的方法,所以这个问题有点没有意义,不过还是要感谢大家的意见。