OK, I have been working on a random image selector and queue system (so you don’t see the same images too often).
All was going swimmingly (as far as my crappy code does) until I got to the random bit. I wanted to test it, but how do you test for it? There is no Debug.Assert(i.IsRandom) (sadly) 😀
So, I got my brain on it after watering it with some tea and came up with the following, I was just wondering if I could have your thoughts?
- Basically I knew the random bit was the problem, so I ripped that out to a delegate (which would then be passed to the objects constructor).
- I then created a class that pretty much performs the same logic as the live code, but remembers the value selected in a private variable.
- I then threw that delegate to the live class and tested against that:
i.e.
Debug.Assert(myObj.RndVal == RndIntTester.ValuePassed);
But I couldn’t help but think, was I wasting my time? I ran that through lots of iterations to see if it fell over at any time etc.
Do you think I was wasting my time with this? Or could I have got away with:

GateKiller’s answer reminded me of this:

Update to Clarify
- I should add that I basically never want to see the same result more than X number of times from a pool of Y size.
- The addition of the test container basically allowed me to see if any of the previously selected images were "randomly" selected.
- I guess technically the thing here being tested in not the RNG (since I never wrote that code) but the fact that am I expecting random results from a limited pool, and I want to track them.
Test from the requirement : ‘so you don’t see the same images too often’
Ask for 100 images. Did you see an image too often?