I am learning TDD and I currently have a method that is working but I thought I’d have a go at rebuilding it using TDD.
The method essentially takes 6 parameters, queries a database, does some logic and returns a List<T>
My initial tests including checking for empty/zero defined string and int method parameter values but now I’m not sure what to do. If I wasn’t using TDD, I would just create code to find the DB connection string and open up a DB connection, query the database, read the values etc.
Obviously we can’t do that in Unit Testing so I was after some advice of how to proceed.
Remember that TDD is as much about good design than it is about testing. This method has too much going on; it violates the Separation of Concerns principle.
You’ve already identified several areas that will need to be tested:
You have several discrete steps there, and there are probably a few more hiding in the code. Breaking those up is the name of the game when it comes to TDD.
For starters, it might be a good idea to factor out the piece that performs the logic.
Is your method building a query dynamically? Break that piece out as well and test it to make sure the query is written properly.
You can put the execution of the query into a standalone repository or something similar, and write integration tests against that. That way you only have a simple test hitting the database instead of the current complex method.
If you try to test this as is, you’ll likely end up with a monster test that requires a lot of setup and duplicates all of your business logic, and when it breaks it’ll be unclear as to what went wrong.