Testing REST API with database backend


I want to know the best/different ways to test a REST API which uses a database backend. I've developed my API with Flask in Python and want to use unittest or nose.

But my problem, is that some resources require another resource to create them in the first place. Is there a way to say that to test the creation of a blog post requires that another test involving the creation of the author was successful?

10/17/2014 4:49:41 AM

Accepted Answer

There are 2 standard ways of approaching a test that depends on something else (object, function call, etc).

  • You can use mocks in place of the objects the code you are testing depends on.
  • You can load a fixture or do the creation/call in the test setup.

Some people like "classical" unit tests where only the "unit" of code is tested. In these cases you typically use mocks and stubs to replace the dependencies.

Other like more integrative tests where most or all of the call stack is tested. In these cases you use a fixture, or possibly even do calls/creations in a setup function.

Generally you would not make one test depend on another. All tests should:

  • clean up after themselves
  • be runnable in isolation
  • be runnable as part of a suite
  • be consistent and repeatable

If you make one test dependent on another they cannot be run in isolation and you are also forcing an order to the tests run. Enforcing order in tests isn't good, in fact many people feel you should randomize the order in which your tests are run.

9/8/2011 11:09:08 PM

The unit test should work in isolated mode so you have to isolate your dependent resources and this done using isolation an framework (mocking framework). Common frameworks for legacy, Windows systems are DevMagicFake, MOQ, Rhino Mocks, TypeMock.

DevMagicFake will make you able to fake the DB so you will not need to create DB or even any code to save your data because it save your data in memory and you can retrieve it anytime.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow