【问题标题】:FactoryBoy: how to teardown?FactoryBoy:如何拆机?
【发布时间】:2015-01-12 06:30:25
【问题描述】:

我不明白 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 对所有测试都运行一次,对吗?现在,如果我有第二个测试并且在运行它之前需要一个干净的状态,我该如何实现呢?谢谢

【问题讨论】:

    标签: django unit-testing factory-boy


    【解决方案1】:

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

    见:

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

    ...

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

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

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

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


    关于tearDown的使用请查看这个答案:Django when to use teardown method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多