gpt4 book ai didi

python - Django Rest Framework 中的 APITestCase、APISImpleTestCase 和 APITransactionTestCase 有哪些不同的用例

转载 作者:行者123 更新时间:2023-11-28 20:02:41 24 4
gpt4 key购买 nike

不同测试用例类的文档是 here

我不确定在什么情况下我会使用每个测试用例类:

  • API测试用例
  • API简单测试用例
  • APITransactionTestCase

最佳答案

Django Rest Framework Docs 中所述, 3 个可用的测试类只是扩展了常规的 Django 测试类,但将客户端切换为使用 APIClient

这个在Django Rest Framework源码中也可以看到

class APITransactionTestCase(testcases.TransactionTestCase):
client_class = APIClient


class APITestCase(testcases.TestCase):
client_class = APIClient


class APISimpleTestCase(testcases.SimpleTestCase):
client_class = APIClient

您应该了解的第一个测试用例是 APISimpleTestCase,它允许我们测试一般的 DRF/Django 事物,例如 http 重定向和检查一些可调用的引发异常。文档指出,在对数据库进行任何测试时,我们不应使用 APISimpleTestCase

我们不应该对数据库使用 APISimpleTestCase 的原因是因为测试数据会在多个测试中保留在数据库中。为了解决这个问题,我们必须使用 APITransactionTestCase,它将使用 atomic() block 将测试包装在事务中,并允许测试运行器在每个测试开始时回滚数据库,允许对数据库相关操作进行简单的原子测试。它还添加了一些与数据库断言相关的额外断言方法,例如 assertNumQueries

最后,APITestCase 用 2 个 atomic() block 包装测试,一个用于整个测试类,一个用于类中的每个测试。这实质上阻止了测试为其他测试更改数据库,因为事务在每个测试结束时回滚。通过在整个测试类周围设置第二个 atomic() block ,特定的数据库事务行为可能很难测试,因此您希望退回到使用 APITransactionTestCase

关于python - Django Rest Framework 中的 APITestCase、APISImpleTestCase 和 APITransactionTestCase 有哪些不同的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45156348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com