Grumpy Programmer's Testing Bundle: Review

Originally published at:

After having gotten some constructive feedback regarding my testing practices on the basic TDD in your new PHP package tutorial, I decided to read Chris Hartjes “Grumpy Testing Bundle”, a set of two books consisting of The Grumpy Programmer’s Guide To Building Testable PHP Applications and The Grumpy Programmer’s PHPUnit Cookbook. It was my hope that those books will prevent me from using the shoddy practices I displayed in that original post and which originally prompted Matthew Weier O’Phinney’s critique. In this post, I’d like to share with you what I’ve learned, and how much this helped me, if at all.

The Grumpy Programmer’s Guide To Building Testable PHP Applications

The first thing I noticed when opening the book was the low page count. For a hefty $20, one would expect more than 68 pages (including dedication, intro, ToC, etc). One shouldn’t judge a book by its cover (or page count), though, so I dove in enthusiastically, disregarding this.

The book has a total of 15 chapters, and only really starts in chapter 7. If you just read Peter’s tutorial on code analysis tools and are familiar with environment isolation like Vagrant (e.g. our Homestead Improved box), you can skip right to it, as those are the only topics the author touches on in those first 22 pages. Unfortunately, it all goes downhill from there due to the severe outdatedness.

Continue reading this article on SitePoint

Have you read Real-World Solutions for Developing High-Quality PHP Frameworks and Applications by Sebastian Bergmann et al (author of PHPUnit)? There is a ton of good advice in it.

Unfortunately second edition of the book is only available in German at the moment.

I did not, but I’ve put it on my to-read list, thanks.
German is fine : )

Haven’t read your review yet, but just wanted to point out that I really like SitePoint is reviewing PHP books.


Thanks! I try to be as objective as possible and make myself not pull punches - generally trying to write reviews like those I’d find useful before thinking about the purchase of a book.

Based on what you had to say about the first book I am surprised that you rated it one out of 5. The last time I reviewed a book that was that outdated I gave it zero out of 5.

You can find the second edition here.

The first half is “ok” for someone who isn’t introduced to the basic concepts I mention and can therefore be useful. A book would have to be actually harmful for me to give it a zero, which this is not.

Thanks for the good review Bruno!


Sounds reasonable.

Author here. Can’t find much to disagree with in Bruno’s review. The book needs an update as things have changed. It is on my list of things to do in the spring.


I saw your avatar on the post before clicking into it and thought “I bet that’s the author”.

Was not disappointed.


Looking forward to it, thanks for chiming in!

I really like the idea of review. Keep it up the good work @swader . Can’t wait for new reviews :smile:


Thanks, much appreciated!

re: “Go read Modernizing Legacy Applications in PHP instead – you’ll learn more on real, memorable examples.”

Why not just start here and not waste so much bandwidth (and my time) telling us what NOT to do?

In any case, thanks. This was a good reminder either way.

Um. Well, so you know in the future - I always put a conclusion at the bottom of my reviews, along with a score, so if you stumble upon any future ones, keep that in mind.

Um. Because everyone always wades through a pile of shit to get to a one line of real / useful value? It was obvious pretty early what you weren’t interest in. We got the point.

I have to tell you, I think you’re losing more people than you’re enlightening. Is that the goal?

You’re thinking in terms of value only to you.

Why “wade” further, then? The value of a review is objectively explaining what’s wrong so the author can focus on it. If you’re not interested in the details, skip to the end.


Yes, please don’t speak for me. I don’t know you and you don’t know me, so please don’t say “We”, as it isn’t the case (and unless you are voted as a spokesperson by a group of people or are the leader of anything, it is actually always the case).