Django setUpTestData() 与 setUp()

新手上路,请多包涵

Django 1.8 附带了 一个重构的 TestCase ,它允许通过 setUpTestData() 方法使用事务和保存点在类级别进行数据初始化。这与在每个测试方法之前运行的 unittest 的 setUp() 形成对比。

问题: 现在 setUp() 在 Django 中的用例是什么 setUpTestData() 存在?

我只是在寻找客观的、高层次的答案,否则这个问题对于 Stack Overflow 来说太宽泛了。

原文由 rnevius 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 477
2 个回答

设置代码不能作为类方法运行的情况并不少见。一个值得注意的例子是 Django 测试客户端:您可能不想在测试中重用相同的客户端实例,否则会共享很多相同的数据,事实上,客户端实例自动包含在 Django 的子类中 SimpleTestCase每个测试方法而不是为整个类创建。假设您使用 setUp 方法对 Django 1.8 之前的世界进行了测试,如下所示:

    定义设置(自我):
        self.the_user = f.UserFactory.create()
        self.the_post = f.PostFactory.create(author=self.the_user)
        self.client.login(
            用户名=self.the_user.username, password=TEST_PASSWORD
        )
        # ... &C。

You might tempted to modernize the test case by changing setUp to setUpTestData , slapping a @classmethod decorator on top, and changing all the self s 到 cls 。但这将因 AttributeError: type object 'MyTestCase' has no attribute 'client' 而失败!相反,您应该将 setUpTestData 用于共享数据,将 setUp 用于每个测试方法客户端:

    @类方法
    def setUpTestData(cls):
        cls.the_user = f.UserFactory.create()
        cls.the_post = f.PostFactory.create(author=cls.the_user)
        # ... &C。

    定义设置(自我):
        self.client.login(
            用户名=self.the_user.username, password=TEST_PASSWORD
        )

注意:如果您想知道示例代码中的变量 f 在做什么,它来自 factoryboy - 一个有用的 fixtures 库,用于为您的测试创建对象。

原文由 Zack M. Davis 发布,翻译遵循 CC BY-SA 4.0 许可协议

摘自测试教程 Django 教程第 10 部分:测试 Django Web 应用程序

  • setUpTestData() 在类级别设置的测试运行开始时调用一次。您将使用它来创建不会在任何测试方法中修改或更改的对象。

  • setUp() 在每个测试函数之前调用以设置任何可能被测试修改的对象(每个测试函数将获得这些对象的“新”版本)。

原文由 user2052130 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏