我是否必须在每个TestCase中创建测试数据库条目?

时间:2015-09-22 04:40:14

标签: python django unit-testing testing

我有一个电子商务应用程序,其中包含productordercheckout等子应用程序。在每个应用程序中,我都有一个tests.py文件,其中包含对应用程序中隔离部分的测试。

许多不同的测试用例/子应用程序使用相同类型的数据。例如,产品测试,订单测试和结账测试都需要有产品,购物车,货币等的样本数据。

目前,我在每个setUp的{​​{1}}函数中创建此测试数据。但这意味着我一遍又一遍地创建相同的数据,这看起来非常愚蠢和不必要。

我是否有办法创造"全球"我测试数据库的测试数据?在运行任何TestCase之前,这将首先创建?或者我已经在做了#34;正确的"方式,即使它看起来很糟糕?

我正在使用Django,它正在使用TestCase python模块。

1 个答案:

答案 0 :(得分:0)

在我看来,单元测试应尽可能与其他单元测试隔离开来。否则,更改测试运行的顺序可能会导致先前通过的测试失败(反之亦然)。因此,我建议您在每次测试之前继续设置和拆除数据库。根据我的经验,您通常只需要为每个测试设置一些项目 - 并且相同的设置代码通常可以由多个测试共享(例如,将该代码放在基类的setUp方法中)。

当然,有提议进行设置(多次测试)的论据 - 例如在setUpClass方法中甚至是setUpModule ...主要论点是它可能在运行测试时节省一点时间 - 这对我来说从来都不是问题,因为我的测试总是很少在一两秒内运行 - 对我来说,Grokking输出比运行测试需要更长的时间,所以我从来没有过多地担心过。另一个优点是你可以获得更像“类似生产”的环境 - 但一般来说,如果你的代码足够孤立,可以轻松进行单元测试,那可能不是什么大问题。