Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialSerdar Halac
15,259 PointsSo in a unittest, does the assert method run something a lot of times?
I'm asking because in the video, we used the following:
self.assertGreaterEqual(int(self.hand3), 3)
and
self.assertLessEqual(int(self.hand3), 18)
But the thing is, we created the hands as follows:
self.hand1 = dice.Roll('1d2') self.hand3 = dice.Roll('3d6')
So let's say that hand 3 is a 2, 4, and 6 (when the hand is created). Now, you only have a single set of values, 2, 4, 6, and it asserts that this total is less than 19, and higher than 0. But what if you just got lucky? What if on 5% of cases, the hand created has a total value that is maybe a 5, 5, 12. Doesn't that specific case get missed, just because the hand created had a 95% chance of happening?
To put it simply: wouldn't it be possible for the code here to be faulty, but because it runs well 95% of the time, the hand created happened to be part of that 95%, and so the unit test assertion worked?
As I'm writing this, I'm actually starting to realize that maybe we will eventually cover the concept of running tests.py a million times, and that's how the statistics will get sorted out.
Still, since I'm not sure, I'm asking!
Thanks!
1 Answer
Chris Freeman
Treehouse Moderator 68,441 PointsThe assert is run a single time. If the assertion is a against a random generated value, then yes, to achieve a better confidence of correct code behavior the tests would need to be run many times.
Is it correct that dice.Roll('3d6')
is three die with values 1-6? Then the minimum would be 3 (1-1-1) and the max would be 18 (6-6-6). So the only way these assertions would flag an error is if the underlying code within the Roll
method actually implemented a die value of less than one or greater than 6.
Serdar Halac
15,259 PointsSerdar Halac
15,259 PointsThank you for your answer. So basically, in order to properly test it, it would have to indeed be run many times. This was a test to check that it at least does what it's supposed to do in general.
Thanks!
Chris Freeman
Treehouse Moderator 68,441 PointsChris Freeman
Treehouse Moderator 68,441 PointsCorrect. It can thought of as a "bounds check" that the roll value is valid.