FactoryBoy:如何拆解?

时间:2014-11-14 19:12:56

标签: django unit-testing factory-boy

我不明白FactoryBoy + Django中的teardown是如何工作的。

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

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运行一次是否正确?现在,如果我在运行之前进行了第二次测试并需要一个干净状态,我该如何实现?感谢

1 个答案:

答案 0 :(得分:4)

如果我理解正确,在这种情况下你不需要tearDown,因为在每次测试之间重置数据库是TestCase的{​​{3}}。

请参阅:

  

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

...

  

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

或者您是指通过OutputFactory将实例的创建限制为某些测试?

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

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


关于tearDown的使用,请查看此答案:default behaviour