Django测试得到错误

时间:2015-06-14 05:39:27

标签: python django

我正在尝试为我的应用准备一些简单的测试。我有一个模型如下:

class Kategoria(models.Model):
    nazwa = models.CharField('Nazwa Kategorii', max_length=30)

    class Meta:
        verbose_name = "Kategoria"
        verbose_name_plural = "Kategorie"

    def __str__(self):
        return self.nazwa

在tests.py中:

import unittest
from blog.models import Kategoria

class KategoriaTestCase(unittest.TestCase):

    def setUp(self):
        self.nazwa = 'Nowa_kategoria'

    def test_tworzenie_obiektu(self):
        tworzenie_nowej_kategoria=Kategoria.objects.create(self.nazwa)
        self.assertTrue(tworzenie_nowej_kategoria)
        self.assertEqual(nowa_kategoria.nazwa,'Nowa_kategoria')

结束测试失败,因为:

  

TypeError:create()需要1个位置参数但是2个被赋予

我做错了什么?

2 个答案:

答案 0 :(得分:2)

create接受关键字参数。

test_tworzenie_obiektu方法更改

tworzenie_nowej_kategoria = Kategoria.objects.create(self.nazwa)
                                                     ^^^^

 tworzenie_nowej_kategoria = Kategoria.objects.create(nazwa=self.nazwa)

所以你的方法应该是

def test_tworzenie_obiektu(self):
        tworzenie_nowej_kategoria = Kategoria.objects.create(nazwa=self.nazwa)
        self.assertTrue(tworzenie_nowej_kategoria)
        self.assertEqual(nowa_kategoria.nazwa,'Nowa_kategoria')

答案 1 :(得分:1)

您需要提供带create()的字段名称,如下所示:

def test_tworzenie_obiektu(self):
    tworzenie_nowej_kategoria = Kategoria.objects.create(nazwa=self.nazwa)
    self.assertTrue(tworzenie_nowej_kategoria)
    self.assertEqual(nowa_kategoria.nazwa,'Nowa_kategoria')

您还应该确认上一个self.assertEqual,因为您班级中没有nowa_kategoria变量,所以它总是会失败;你可能想要

self.assertEqual(tworzenie_nowej_kategoria.nazwa, self.nazwa)

请注意,我删除了硬编码名称,并将变量名称更改为要返回的对象名称。