FactoryBoy:如何拆解?

Hou*_*man 4 django unit-testing factory-boy

我不明白teardownFactoryBoy + Django 是如何工作的。

我有一个这样的测试用例:

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)
Run Code Online (Sandbox Code Playgroud)

setUp对所有测试运行一次是否正确?现在,如果我进行第二次测试并且在运行之前需要一个干净的状态,我该如何实现?谢谢

ari*_*rie 5

如果我理解正确,你就不需要tearDown在这种情况下,复位每次测试之间的数据库是默认行为TestCase

看:

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

...

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

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

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

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


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