Another debutant!
I am having trouble learning to use unittests.
My question is;
In the example below, did you write the class "SquareRootTests(unittest.TestCase):" ?
   Or do I find a set of them in the library?
And what is the significance of the name chosen "self.assertAlmostEqual(square_root(3), 2.0) "? I take it the first argument is calling my function with its argument and the second argument is the correct answer?

I am quite unclear how one proceeds to set up unittests.

With many thanks in advance,

Sydney


On 01/04/2014 03:10, Danny Yoo wrote:
I tweaked it to what I thought was correct but when I test it I get nothing 
back.

def square_root(a, eps=1e-6):
    x = a/2.0
    while True:
        y = (x + a/x)/2.0
        if abs(x - y) < eps:
            return y
        x = y

round(square_root(9))

The way I tweaked it seems to work, I’m getting the correct answer on the 
calculator but the interpreter is not returning anything when I check in python.

I didn't want to keep you waiting, so I'll cut to the chase.  This
line here in your program:

     round(square_root(9))

computes a value... But it doesn't do anything with that value.

Try printing the value.


You may also try to see that your program is doing something effective
by "unit testing" it.  This is often a lot better than just printing
values and looking at them, because the test case will say what the
_expected_ value is, so it's more informative.



For this example, the following is a start at unit testing the above
function.  Add the following to the bottom of your program's source.


###############################################
## See:  http://www.openp2p.com/pub/a/python/2004/12/02/tdd_pyunit.html
import unittest
class SquareRootTests(unittest.TestCase):
     def testSimpleCases(self):
         self.assertAlmostEqual(square_root(1), 1.0)
         self.assertAlmostEqual(square_root(4), 2.0)

if __name__ == '__main__':
     unittest.main()
###############################################


Here's what it looks like when I run this:

##############################################
$ python sqrt.py
4.472135955
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
##############################################


You can then start adding more and more to tests to gain confidence
that the code is doing something reasonable.



If we try to put in an intentionally broken test, like:

         self.assertAlmostEqual(square_root(3), 2.0)

in the body of testSimpleCases(), then we'll see the following error
when running the program:


##############################################
$ python sqrt.py
4.472135955
F
======================================================================
FAIL: testSimpleCases (__main__.SquareRootTests)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "sq.py", line 20, in testSimpleCases
     self.assertAlmostEqual(square_root(3), 2.0)
AssertionError: 1.7320508075688772 != 2.0 within 7 places

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures=1)
##############################################


And that's what you want to see.  If either the test or the code is
bad, it'll say something about it.


One other thing: you will want to check a particularly insidious case
that will cause the program here to behave badly.  Consider the zero
case: square_root(0).  Write the test case.  Run it.  You'll see
something interesting.



Good luck!
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor


--
Sydney Shall
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to