我有这样的一对测试:
def test_initial_task_deletion_status_is_none(self):
unfinished_task = Task.objects.get(tasked_with="Unfinished Test")
self.assertIsNone(unfinished_task.delete_status)
# Make sure a task's deletion status changes appropriately
def test_unfinished_task_deletion_status_updates_appropriately(self):
unfinished_task = Task.objects.get(tasked_with="Unfinished Test")
unfinished_task.timed_delete(delta=.1)
self.assertIs(unfinished_task.delete_status, "Marked for Deletion")
这将继续,但是我将在每个人的开头加上unfinished_task = Task.objects.get(tasked_with="Unfinished Test")
。有没有一种方法可以将这些类型的东西分成单独的测试,但是使用相同的查询结果?
答案 0 :(得分:1)
假设您使用的是Django's testing framework,则可以使用setUp()
进行此操作。
有关unittest.TestCase.setUp()
here
所以您更新的代码段如下所示:
from django.test import TestCase
class MyTestCase(TestCase):
def setUp(self):
self.unfinished_task = Task.objects.get(tasked_with="Unfinished Test")
def test_initial_task_deletion_status_is_none(self):
self.assertIsNone(self.unfinished_task.delete_status)
# Make sure a task's deletion status changes appropriately
def test_unfinished_task_deletion_status_updates_appropriately(self):
self.unfinished_task.timed_delete(delta=.1)
self.assertIs(self.unfinished_task.delete_status, "Marked for Deletion")
答案 1 :(得分:1)
您可以在setUp
方法中放置重复的行,这将减少代码的重复性,但是正如DanielRoseman指出的那样,它仍将在每次测试中运行,因此您将不会使用相同的查询结果。
您可以将其放在setUpTestData
方法中,并且在MyTestCase
中的所有测试之前,它将仅运行一次,但是您的unfinished_task
对象将是一个类变量,在所有测试中共享。在一次测试中对对象进行的内存中修改将延续到后续测试中,这不是您想要的。
在只读测试中,使用setUpTestData
是消除不必要查询的好方法,但是如果要修改对象,则每次都需要重新启动。