测试带数据库后端的REST API
我想了解测试一个使用数据库的REST API的最佳或不同方法。我用Python的Flask开发了我的API,想用unittest或nose来测试。
不过我遇到的问题是,有些资源在创建之前需要其他资源。有没有办法说明,测试创建一个博客文章需要先成功测试创建作者这个步骤呢?
2 个回答
2
单元测试应该在隔离的模式下进行,这样你就需要把依赖的资源隔离开来。这是通过使用一个叫做“隔离框架”(也就是模拟框架)来实现的。对于老旧的Windows系统,常用的框架有DevMagicFake、MOQ、Rhino Mocks和TypeMock。
DevMagicFake可以让你模拟数据库,这样你就不需要真的创建数据库或者写任何代码来保存数据,因为它会把数据保存在内存中,你随时都可以取出来。
8
有两种标准的方法来处理依赖于其他东西(比如对象、函数调用等)的测试。
- 你可以用“模拟对象”来代替你正在测试的代码所依赖的对象。
- 你可以加载一个“固定数据”或者在测试准备阶段进行创建或调用。
有些人喜欢“经典”的单元测试,这种测试只关注代码的“单元”。在这种情况下,通常会使用模拟和替代品来替换依赖的部分。
而另一些人则喜欢更综合的测试,这种测试会检查大部分或全部的调用过程。在这种情况下,你会使用固定数据,或者甚至在准备函数中进行调用或创建。
一般来说,你不应该让一个测试依赖于另一个测试。所有的测试应该:
- 自己清理干净
- 可以单独运行
- 可以作为一组一起运行
- 保持一致性和可重复性
如果你让一个测试依赖于另一个测试,那么它们就不能单独运行,而且你也在强制测试的执行顺序。强制测试的顺序并不好,实际上很多人认为你应该随机化测试的执行顺序。