[ Index | Exercise 5.5 | Exercise 6.1 ]
Objectives:
- Learn how to use Python's unittest module
Files Created: teststock.py
In this exercise, you will explore the basic mechanics of using
Python's unittest modules.
In previous exercises, you created a file stock.py that contained
a Stock class. In a separate file, teststock.py, define the following
testing code:
# teststock.py
import unittest
import stock
class TestStock(unittest.TestCase):
def test_create(self):
s = Stock('GOOG', 100, 490.1)
self.assertEqual(s.name, 'GOOG')
self.assertEqual(s.shares, 100)
self.assertEqual(s.price, 490.1)
if __name__ == '__main__':
unittest.main()Make sure you can run the file:
bash % python3 teststock.py
.
------------------------------------------------------------------```
Ran 1 tests in 0.001s
OK
bash %
Using the code in teststock.py as a guide, extend the TestStock class
with tests for the following:
- Test that you can create a
Stockusing keyword arguments such asStock(name='GOOG',shares=100,price=490.1). - Test that the
costproperty returns a correct value - Test that the
sell()method correctly updates the shares. - Test that the
from_row()class method creates a new instance from good data. - Test that the
__repr__()method creates a proper representation string. - Test the comparison operator method
__eq__()
Suppose you wanted to write a unit test that checks for an exception. Here is how you can do it:
class TestStock(unittest.TestCase):
...
def test_bad_shares(self):
s = stock.Stock('GOOG', 100, 490.1)
with self.assertRaises(TypeError):
s.shares = '50'
...Using this test as a guide, write unit tests for the following failure modes:
- Test that setting
sharesto a string raises aTypeError - Test that setting
sharesto a negative number raises aValueError - Test that setting
priceto a string raises aTypeError - Test that setting
priceto a negative number raises aValueError - Test that setting a non-existent attribute
shareraises anAttributeError
In total, you should have around a dozen unit tests when you're done.
Important Note
For later use in the course, you will want to have a fully working
stock.py and teststock.py file. Save your work in progress if you
have to, but you are strongly encouraged to copy the code from
Solutions/5_6 if things are still broken at this point.
We're going to use the teststock.py file as a tool for improving the Stock code
later. You'll want it on hand to make sure that the new code behaves the same way
as the old code.
[ Solution | Index | Exercise 5.5 | Exercise 6.1 ]
>>> Advanced Python Mastery
... A course by dabeaz
... Copyright 2007-2023
