I need some advice about efficient way of writing integration tests for our current ASP.NET MVC application. Our architecture consists of:
- A Service Layer below Controllers
- Service Layer uses Repositories and Message Queue (sometimes) to send messages to external applications.
What I think should be done is to:
Write behavioral unit tests for all pieces in isolation. So, for example, we should unit test the Service Layer while mocking Repositories and Message Queues.
Same goes for Controllers. So we mock the Service Layer and unit test the Controller.
- Finally, we write separate integration tests for Repositories against a real database and for Message Queue classes against real message queues to ensure they persist/retrieve data successfully.
My Questions:
Are there any other types of integration tests that we need to write?
Do we still need to write integration tests for Services with the real Repositories and Message Queues?
Do we still need to write integration tests for Controllers with the real Services (which in turn consists of real Repositories and Message Queues).
Any advice would be greatly appreciated.
Cheers