Django测试rest-framework:APIRequestFactory vs APIClient

Rob*_*wen 20 django rest unit-testing django-rest-framework

刚接触测试我想在Django(Django-rest-framework)中测试我的API.

我正在为我的观点设置测试,这是我的API端点.现在查看文档,我可以使用API​​RequestFactory或APIClient.两者似乎也做同样的事情.

这两者有什么区别,为什么/何时应该使用其中一种?

ari*_*rie 30

如果你看一下在Django中测试"标准"视图工具和帮助器,你会发现一些非常类似的东西TestClient,a和a RequestFactory.

RequestFactory与测试客户端共享相同的API.但是,RequestFactory不是像浏览器那样运行,而是提供了一种生成请求实例的方法,该实例可以用作任何视图的第一个参数.这意味着您可以像测试任何其他功能一样测试视图功能 - 作为黑盒子,具有完全已知的输入,测试特定输出.

TestClient让你与你的网站从用户浏览网站的观点互动(...虽然测试JavaScript是另一个故事).在测试您的网站时会有很多事情发生(Sessions,Middlewares,URL-Routing等).因此,这些通常是更多的集成测试,模仿真实世界与您的网站或API的互动.

A RequestFactory允许您以非常孤立的方式测试您的视图.您可以构建请求并测试您的视图,而无需设置您的URL或关心中间件等中发生的事情.因此,这更接近于典型的单元测试.

也就是说,两种类型的测试都很有用.为了大致了解您的API是否按预期工作,我可能会开始使用API​​Client并在涉及更复杂的视图时使用RequestFactories.但正确的组合在很大程度上取决于您的具体应用.