Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the point of testing fake repositories?

I've been trying to push my mentallity when developing at home to be geared more towards TDD and a bit DDD.

One thing I don't understand though is why you would create a fake repository to test against? I haven't really looked into it much but surely the idea of testing is to help decouple your code (giving you more flexability), trim down code needed and bring down the number of bugs.

So can someone fill in my foolish brain as to why some like to test fake repositories? I would have thought testing against a real database is a much better alternative to creating a fake one because then you KNOW that it works against your real world data store.

like image 336
John_ Avatar asked Jan 02 '09 12:01

John_


2 Answers

The fake repository allows you to test just your application code.

The fake repository means an automated test can easily set up a known state in the repository.

The fake repository will be several orders of magnitude faster than a real database.

The fake repository is NOT a substitute for system testing that will include your database.

like image 111
Giraffe Avatar answered Sep 27 '22 18:09

Giraffe


As I see it there are two really big reasons why you test against faked resources:

  • It makes unit testing faster when you have a mocked up against slow I/O or database. This may not look like anything if you have a small test suite but when you're up to +500 unit tests it starts to make a difference. In such amount, tests that run against the database will start to take several seconds to do. Programmers are lazy and want things to go fast so if running a test suite takes more than 10 seconds then you won't be happy to do TDD anymore.
  • It enforces you to think about your code design to make changes easier. Design by contract and dependency injection also becomes so much easier to do if you've made implementation against interfaces or abstract classes. If done right such design makes it easier to comply to changes in your code.

The only drawback is the obvious one:

  • How can you be sure it really works?

...and that is what integration tests are for.

like image 28
Spoike Avatar answered Sep 27 '22 19:09

Spoike