4

I don't understand how teardown in FactoryBoy + Django works.

I have a testcase like this:

class TestOptOutCountTestCase(TestCase):
    multi_db = True

    def setUp(self):
        TestCase.setUp(self)
        self.date = datetime.datetime.strptime('05Nov2014', '%d%b%Y')
        OptoutFactory.create(p_id=1, cdate=self.date, email='inv1@test.de', optin=1)

    def test_optouts2(self):
        report = ReportOptOutsView()
        result = report.get_optouts()
        self.assertEqual(len(result), 1)
        self.assertEqual(result[0][5], -1)

setUp is running once for all tests correct? Now if I had a second test and needed a clean state before running it, how do I achieve this? Thanks

4

1 回答 1

5

如果我理解正确,在这种情况下您不需要tearDown,因为在每次测试之间重置数据库是.TestCase

看:

在每个测试用例开始时,在运行 setUp() 之前,Django 将刷新数据库,将数据库返回到调用 migrate 后直接所处的状态。

...

对测试用例中的每个测试重复此刷新/加载过程,因此您可以确定测试的结果不会受到另一个测试或测试执行顺序的影响。

或者你的意思是通过OutputFactory某些测试来限制实例的创建?

那么您可能不应该将实例的创建放入setUp.

或者,您创建了两个 TestCase 变体,一个用于依赖工厂的所有测试,一个用于不依赖工厂的测试。


关于tearDown检查这个答案的用途:Django when to use teardown method

于 2014-11-14T19:55:38.253 回答