APIClient
。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()
块将测试包装在事务中,并允许测试运行程序在每个测试开始时回滚数据库,从而轻松地进行数据库相关操作的原子测试。它还添加了一些与数据库断言相关的额外断言方法,例如assertNumQueries
。
最后,APITestCase
使用两个 atomic()
块将测试包装起来,一个用于整个测试类,另一个用于类中的每个测试。这基本上阻止了测试为其他测试更改数据库,因为事务在每次测试结束时回滚。通过在整个测试类周围使用这个第二个 atomic()
块,特定的数据库事务行为可能很难进行测试,因此您需要回退到使用 APITransactionTestCase
。