0

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

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 支持这个,我该怎么做?

4

2 回答 2

0

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

相反,我建议您尝试工厂方法。通过为您正在使用的模型创建工厂,您可以在您的场景中取得一些胜利:

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

给工厂男孩看看。

于 2013-12-19T15:00:36.180 回答
0

看来您正在尝试以一种不完全可取的方式使用固定装置。

Fixtures 仅用于包含在整个测试套件中通用的数据,而不是在类/测试用例级别。

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

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

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

@classmethod
    def tearDownClass(cls):
于 2013-03-17T08:15:47.490 回答