Testing for exceptions
Another requirement is that the price should not be negative. We would want to raise a ValueError if the price is negative. How would we check for this expectation in a test? Here is one way to do that:
def test_negative_price_should_throw_ValueError(self):
goog = Stock("GOOG")
try:
goog.update(datetime(2014, 2, 13), -1)
except ValueError:
return
self.fail("ValueError was not raised")In the preceding code, we call the update method with a negative price. This call is wrapped with a try...except block to catch ValueError. If the exception is raised correctly, then control goes into the except block where we return from the test. Since the test method returned successfully, it is marked as passing. If the exception is not raised, then the fail method gets called. This is another method provided by unittest.TestCase and raises a test failure exception when it is called. We can pass in a message to provide some...