我认为有以下逻辑:
def view_function(request):
if request.method == 'POST':
uploadform = UploadFileForm(request.POST, request.FILES)
if uploadform.is_valid():
#do stuff
其中UploadFileForm等于:
class UploadFileForm(forms.Form):
file = forms.FileField()
我正在尝试为此视图编写单元测试。在Django docs中,建议的方法是:
class test_stuffTest(TestCase):
def setUp(self):
self.client = django.test.client.Client()
...
def test_stuff(self):
myfile = open('....\file.csv','r')
response = self.client.post('/', {'name':'file.csv','attachment':myfile})
#check response
我的目标是让uploadform.isu valid()计算为True,这样我就可以测试表单验证之后的代码。当我运行上面的测试时,uploadform.is_valid()的计算结果为False。我有什么遗漏吗?测试中的代码是将文件添加到request.FILES中,还是在执行其他操作?
也许我遗漏了一些东西,但听起来像是一个很好的模拟图书馆的工作。我个人非常喜欢Mock。但是,我陷入了这样一个阵营:认为单元测试应该不受所有外部依赖关系的影响(比如在某个位置必须有一个名为“file.csv”的文件,等等)
在文档中,文件字段称为
attachment
,但在您的文档中,它称为file
。您也不需要在post数据中使用
name
,它指的是另一个名为name
的字段,而不是您正在上载的文件的名称。请尝试以下操作:
django的测试套件的工作方式是:
这样你就不需要创建一个临时文件并写入它,也不需要模拟一个文件(不像听起来那么简单)。
相关问题 更多 >
编程相关推荐