Notes on TDD - chapter 2
- Related pages
Below are notes/tests I made during my reading session of the Test Driven Development: By Example book, by Kent Beck.
When TDDing, for each step, think about:
- Add a little test: think how I wish the interface would look like. Remember we are writing a story and include all the elements in the story I think will be necessary to reach the right answer.
- Run all test: Make the bar go green quickly. If the solution is obvious, write it in, but if it takes 1min or more, then make a note about it and get back to main problem.
- Make a little change: Remove all sins we left in the code, the duplication that we introduced and get back to making the test pass.
Our goal is to have clean code that works.
The previous currency implementation, when we call times
we are changing the
Dollar object. Before I had 5 dollars, and after calling times
, I now have 20
dollars. It makes sense to instead return a new Dollar object, keeping the
original value.
class DollarV2:
amount: int
def __init__(self, amount: int):
self.amount = amount
def times(self, multipler: int) -> "DollarV2":
return DollarV2(self.amount * multipler)
def test_multiplication():
d = DollarV2(5)
d_ten = d.times(2)
assert d_ten.amount == 10
With this modification, we now removed the dollar side effect, which we had everytime we multiplied our dollar object.
With that, we now have 2/3 strategies to quickly get the tests to pass:
- Fake it: Return a constant and gradually replace constants with variables until we end with the real code
- Use obvious implementations: type in the real implementation