【发布时间】:2014-03-17 10:55:02
【问题描述】:
我想通过我的 Django 测试来创建和修改媒体文件。因此,就像 Django 测试对数据库所做的那样,我想在每个测试运行之前设置一个空的 MEDIA_ROOT 文件夹。
我想我会创建一个临时文件夹并将 MEDIA_ROOT 指向它。但是,我不知道将执行此操作的代码放在哪里。在this example 中,创建了一个特殊的Runner。跑步者设置媒体根并将其拆除。
不幸的是,setup_test_environment 在运行第一个测试函数之前被调用一次,而不是每次运行测试时。
我尝试创建一个FileSystemTestCase 类,该类在其setUp 函数中设置文件系统,并让我的所有测试用例都派生自它。虽然这可行,但它要求每个编写测试用例的人记得调用我的 setUp 方法,因为它不会自动调用。
通常我不会为此烦恼,但是忘记调用父 setUp 方法的代价可能非常高 - 如果有人忘记调用并且测试意外地在实时系统上运行,就会发生不好的事情。
编辑:我发现的临时解决方案是实现 both 我自己的跑步者和基础TestCase。两者都设置了一个临时的 MEDIA_ROOT,所以如果有人忘记调用我的setUp 方法,测试将在上一个测试的临时文件夹中运行,或者是运行者设置的那个。这可能会导致测试失败,但不会破坏实时数据。
我希望有一个更优雅的解决方案。
【问题讨论】:
标签: python django python-unittest