Why Use Random Values For Unit Testing
On a previous post I introduced a library for generating random values for purposes of unit testing.
I received a few comments and questions on my blogs [^][^][^][^].
Simon says that he’d “generally want every instance of the test I run to be repeatable on every run” and he’d “inclined to use the data source functionality in VSTS Unit Tests”. I couldn’t agree more.
Hugo pointed me to Pex. Looks nice. I’ll have to take a deeper look at it.
Other commenters were worried that in the case of a test failing to pass they were unable to reproduce the conditions of the test and thus would be unable to understand why the test had failed. As I see it, all data used in a failed test should be in the test output (at least, the data that made the test fail). Being it predictable data or random data.
I guess that most of the comments “against” my idea were due to the fact that I didn’t explain it well. I’ll try to do a better job now.
I use these random values when the value itself is not important, what’s important is its uniqueness.
Imagine you have Costumer class where it’s enough to tell that the costumer is the same in any two given instances if the costumer ID is the same. In order to test the comparison code, I don’t need any particular reproducible set of values. I just need them to be different or the same depending on the test.
Imagine I have some code that needs to access the database with the connection string in a specific connection string settings element. I don’t care what the connection string is because I won’t be really accessing the database (this is really easy to accomplish with Isolator).
I hope I’ve explained myself better this time.