Best_Where_Gives
Best_Where_Gives

Reputation: 481

Best way to Unit test non-existing Database

We have a build server which does not have a database running on its machine. Now we want to make unit tests which also cover SQL-related tasks, for example writing mock-data and reading them again to verify the output (it gets manipulated by C# code in the process).

So the common approach would be to provide a connection-string to the remote server which actually runs a database. This works, but it is unwanted because the database-server could be inaccessible when the build is triggered, and therefore the automatic tests would fail.

What is the best way to create a "pseudo-database" while running Unit tests? Is this even possible without an actual database? Does it even make sense?

Upvotes: 1

Views: 381

Answers (2)

Neville Kuyt
Neville Kuyt

Reputation: 29629

The commonly accepted answer to "how do I unit test something with external dependencies" is to use a mocking layer.

However, that very quickly becomes unwieldy - you end up writing and maintaining a lot of code just to mimic your database, and it's not clear this code will pay for itself. For instance, if your SQL statements has a typo, your unit tests won't catch that.

Instead, it is much better to factor the code which manipulates the data out into a layer which can be unit-tested without database access.

Upvotes: 1

Mrinal Kamboj
Mrinal Kamboj

Reputation: 11478

Use mocking framework like Moq, check here. That is the exact purpose of the Mocking frameworks that only a given component can be unit tested and any integration like database can be mocked to return the valid pre-defined result at the run-time and thus determine the working of given code / unit

Upvotes: 3

Related Questions