Я изучаю, как использовать Django Test Infrastructure. Очень часто трудно найти хороший тестовый пример.Django Test Case
Вот один тестовый пример в танго с учебником по Django.
class CategoryMethodTests(TestCase):
def test_ensure_views_are_positive(self):
"""
ensure_views_are_positive should results True for categories where views are zero or positive
"""
cat = Category(name='test',views=-1, likes=0)
cat.save()
self.assertEqual((cat.views >= 0), True)
Вот класс Категория в models.py
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
slug = models.SlugField(unique=True, default=uuid.uuid1)
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Category, self).save(*args, **kwargs) #python MRO
def __str__(self):
return self.name
Я добавил эту строку в метод сохранения
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
if self.views >=0:
super(Category, self).save(*args, **kwargs) #python MRO
Тестовый пример до сих пор не удается. Есть два вопроса: 1. Как сделать пробный проход; 2. Как обращаться с корпусом else (self.views < 0)?
Благодарим Alasdair за быстрый ответ.
Последующие действия: Я тестирую домашнюю страницу под названием «Индекс». Вот код теста:
class IndexViewTests(TestCase):
def test_index_view_with_no_categories(self):
response = self.client.get(reverse('index'))
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(response.context['categories'], [])
def **add_category**(name, views, likes):
c = Category.objects.get_or_create(name=name)[0]
c.views = views
c.likes = likes
c.save()
def test_index_view_with_categories(self):
add_category('test', 1, 1)
add_category('temp', 1, 1)
add_category('tmp', 1, 1)
add_category('tmp test temp', 1, 1)
response = self.client.get(reverse('index'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "tmp test temp")
num_cats = len(response.context['categories'])
self.assertEqual(num_cats, 4)
Когда я запускаю тестовый случай, он не:
add_category ('тест', 1, 1) NameError: имя 'add_category' не определен
Категория add_ определена в классе IndexViewTests. Как эта ошибка будет исправлена? Благодарю.
Спасибо, у меня есть продолжение по этому поводу, так как это тот же тестовый файл. – day
Лучше не отмечать ответ как принятый, если у вас все еще есть вопрос, иначе никто его не увидит. Было бы также лучше задать отдельный вопрос, но на этот раз я быстро отвечу. В учебнике говорится, что 'add_categegory' должно быть функцией в тестовом файле, это не должно быть методом класса вида. Если бы это был метод, это было бы 'def add_category (self, name, ...)', и вы бы назвали его 'self.add_category ('test', ...)'. Если вы не знакомы с этим, было бы неплохо сделать некоторые обучающие программы для начинающих Python. – Alasdair