[Tutor] unittests
Sydney Shall
s.shall at virginmedia.com
Fri Apr 4 15:12:09 CEST 2014
I would like to thank both Steven and Danny for their explanations.
They were much easier for me to understand than the documentation.
I now think that I understand what I have to do and how I proceed.
Thanks to you both for spending so much time on the answer.
Sydney
On 01/04/2014 18:54, Danny Yoo wrote:
>> Yes, that unit test was written by Danny (I assume -- I suppose he might
>> have copied it from somewhere else.)
> Oh, who knows where I got that code from. :P
>
> ---
>
> Sydney, you can also take a look at some of the official documentation
> of the unittest library:
>
> https://docs.python.org/2/library/unittest.html#basic-example
>
> You don't have to read all of it, but touching on it and knowing where
> the documentation and reference is can be helpful. The
> "assertAlmostEqual" is part of the library,
>
> https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertAlmostEqual
>
> In Scott's case, he was computing with floating point, so writing the
> tests to use inexact almost-equality comparison seemed reasonable to
> me.
>
>
> You might find this also useful:
>
> http://www.diveintopython.net/unit_testing/
>
>
>
>> Although they might be a bug in the test! In this case, Danny intends
>> that as a deliberately buggy test -- 1.732... is *not* "approximately
>> equal" to 2, at least not according to the rules of unittest.
> As a side note, when I'm writing tests, I usually write them
> deliberately wrong the first time and run them to make sure that the
> framework is properly reporting errors. Only after I see failing
> tests do I put in the right values for the test. It helps me gain
> more confidence that the universe is all right.
>
>
>>> I am quite unclear how one proceeds to set up unittests.
> Functions that take inputs and return values are usually easy to test.
> For simple programs, express a piece of functionality and some
> property you expect that functionality to have. In pure computations
> like math functions, you can state the inputs and expected outputs as
> a test.
>
> By the way, if we can't even do that, to express the expected output
> of our functions, then that might be a sign that we don't understand
> what we're trying to code! So there's a good reason to consider test
> cases early: it forces us to put a stake in the ground and say: "This
> is what the function is supposed to do, and if it doesn't do this, the
> code is wrong."
>
> If I know that a properly functioning f() is supposed to behave like this:
>
> f(9) ==> 3
> f(10) ==> 42
> f(1) ==> 32
>
> then I want to write those concrete cases as tests. An easy way to do
> so is to use the unittest library to write those tests. We can write
> the cases above as the following test:
>
> ###############################
> class MyTests(unittest.TestCase):
> def testCrazyFunction(self):
> self.assertEqual(f(9), 3)
> self.assertEqual(f(10), 42)
> self.assertEqual(f(1), 32)
> ###############################
>
> What this means is that I have some expectations on what the function
> is supposed to do, apart from how it is actually coded. That's
> important, to express those expectations, because usually you trust
> your expectations more than you trust the implementing code. So if
> the test breaks, usually it's the code that's broken, so it gives a
> quick canary-in-the-coalmine.
>
>
> If you want to explore this more, check for Kent Beck's: "Test-driven
> Development: By Example".
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
--
Sydney Shall
More information about the Tutor
mailing list