为特定测试案例加载夹具

时间:2013-03-17 07:40:30

标签: django selenium django-testing

我有一种情况,我需要在功能测试类中为不同的情况加载不同的灯具

class Mytest(LiveServerTestCase):
    fixtures = ['somefixture.json']

    def test_some_test_method(self):
        #load more fixtures for this test case
        fixtures.extend(['some_other_fixture.json']) 
django支持这个,我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

似乎你试图以一种不完全可取的方式使用灯具。

Fixtures只是为了拥有整个测试套件中通用的数据,而不是在类/测试用例级别。

当您尝试制作一个好的测试套件时,让您的测试彼此隔离是非常重要的。让测试改变彼此的数据,或者让测试依赖于另一个测试改变数据本质上是脆弱的。

您应该使用setUp()和tearDown()来处理类级数据操作,并在功能套件中使用正确的类隔离。

最重要的是,你还可以看一下tearDown()的用法,没有注释的用法是不同的:

@classmethod
    def tearDownClass(cls):

答案 1 :(得分:0)

您倾向于为不同的测试加载不同的数据是好的。然而,与许多情况一样,灯具是完成此任务的原始和暴力工具。

相反,我建议您尝试工厂方法。通过为您正在使用的模型创建工厂,您可以在您的方案中获得多个胜利:

  • 即使您的模型发生变化,您的测试套件也会保持连贯性(但是,如果添加新的必填字段,您可能需要更新工厂,尽管这与创建新夹具相差甚远)
  • 您可以通过巧妙地更改工厂的实施来满足每个测试的要求,从而减少为每个测试创建正确状态所涉及的大量逻辑。
  • 您将确保针对实际存在于应用程序状态中的数据运行测试,而不是创建应用程序时应用程序所处的状态。

Give Factory Boy a look.