Most things I read about Unit Tests is about testing your classes and their behaviour. But how do you test saving data to a database and reading data from a database. In our project saving and reading data is done through services that are used by a Flex Application (using WebORB as a gateway). For instance, a service reads all users that have access to a certain module. How do you test that the users that are being returned actually are the users having access to that module?
Sometimes being able to test loading data out of database requires that there’s data already in the database. In some of our tests we first need to save a lot of testdata to the database before being able to test reading stuff…
The same thing is valid for Stored Procedures. How do you test sp’s if there’s no data in the database. Reality is that to test certain stored procedures, we need data in ten tables…
thx, Lieven Cardoen
You can have tests for db actions, but try to avoid it if possible, otherwise:
It may also be a code smell that your classes are not separating db related work from other work, e.g. business logic. However it may not, we have a framework test which verifies that the automatically generated SQL script returns the expected incremented identity value after inserting new data, AFAIK there is no way to test that this code is working other than to execute it against the db. You could mock it out or just assume that if the SQL matches what you expect then it’s ok, but I don’t like that assumption since so much other code relies on it.
Depending on your test framework, you should mark these tests as [Database] related, allowing you to separate them from other tests.