What's the point of testing fake repositories?

后端 未结 3 1397
清歌不尽
清歌不尽 2021-02-14 20:08

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 creat

相关标签:
3条回答
  • 2021-02-14 20:22

    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.

    0 讨论(0)
  • 2021-02-14 20:22

    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.

    0 讨论(0)
  • 2021-02-14 20:38

    I upvoted Giraffe's answer, but want to add just a couple of points:

    • Each developer can use a mock/fake repository for her/his own unit testing without interfering with the tests being done by other developers on the same project.

    • Using a local mock/fake repository reinforces the user of a data abstraction layer, which is good design practice.

    As an example, I've used something as simple as a HashMap to implement a mock of the data access layer. This makes it extremely easy for each unit test to ensure that exactly the necessary conditions exist for its purpose, and to verify that the right calls were made on the data access layer.

    0 讨论(0)
提交回复
热议问题