Refactoring the design
In the previous section, we talked about the new requirement of having to check if a stock has an increasing trend.
Let us start by writing a test first:
class StockTrendTest(unittest.TestCase):
def setUp(self):
self.goog = Stock("GOOG")
def test_increasing_trend_is_true_if_price_increase_for_3_updates(self):
timestamps = [datetime(2014, 2, 11), datetime(2014, 2, 12), datetime(2014, 2, 13)]
prices = [8, 10, 12]
for timestamp, price in zip(timestamps, prices):
self.goog.update(timestamp, price)
self.assertTrue(self.goog.is_increasing_trend())The test takes three timestamps and prices and performs an update for each one. Since all three prices are increasing, the is_increasing_trend method should return True.
To make this test pass, we need to first add support for storing price history.
In the initializer, let us replace the price attribute with a price_history list. This list will store the history of price updates...