I get the idea behind unit testing however am trying to think of a clean simple way do it when it requires database functionality. For instance I have a function that return result based off a database select query. Would the database alway have to remain the same for me to properly see that only the correct results are being returned. What is the best way to perform unit testing (in PHP) when it requires database inactivity (whether it be read, write, update, or delete)?
-
1See here: stackoverflow.com/questions/145131/…Mark Roddy– Mark Roddy2010-08-24 19:17:32 +00:00Commented Aug 24, 2010 at 19:17
-
Best practices for the unit test of database functionality are languages independent. JUnit for repository layer: stackoverflow.com/a/63424315/5326374nagendra patod– nagendra patod2021-06-05 05:49:06 +00:00Commented Jun 5, 2021 at 5:49
3 Answers
There is a whole chapter on that in the PHPUnit manual:
- http://www.phpunit.de/manual/current/en/database.html and also worth reading
- http://matthewturland.com/2010/01/04/database-testing-with-phpunit-and-mysql/
It's like with everything else when Unit-Testing. Create a known state and test your code against it to see if it returns the expected results.
Comments
Personally, I create a dummy testing database and populate it with a known data set for each testing run (I do that right in the setUp functions). Then the tests run against that data set, and then it's removed on tearDown...
Now, this is more of a Integration test than an Unit test (And personally I treat it differently from a unit test, run on its own schedule along with other integration tests), but it's still quite useful.
1 Comment
It is not a unit test if it needs the database.