This project is from the book Growing Object Oriented Software Guided by Tests, I read every chapter and type in the code. I find that sometimes the book can be a bit confusing, so I added some of my own explanations. There are a series of blog posts here:
https://www.lvguowei.me/post/goos-1/
https://www.lvguowei.me/post/goos-2/
https://www.lvguowei.me/post/goos-3/
https://www.lvguowei.me/post/goos-4/
https://www.lvguowei.me/post/goos-5/
https://www.lvguowei.me/post/goos-6/
https://www.lvguowei.me/post/goos-7/
https://www.lvguowei.me/post/goos-8/
https://www.lvguowei.me/post/goos-9/
https://www.lvguowei.me/post/goos-10/
https://www.lvguowei.me/post/goos-11/
https://www.lvguowei.me/post/goos-12/
https://www.lvguowei.me/post/goos-13/
https://www.lvguowei.me/post/goos-14/