The long way through Software Craftsmanship

Exploring Testing with Java 8 Lambdas

Jul 30, 2015 - 4 minute read - Comments - draftjavalambdaexplorationclient

At a client, we were testing a simple feature, but the resulting tests had much subtle repetition: (source code is here) @Test public void log_when_sending_greeting_letters() { sut.send(mock(GreetingLetter.class)); verify(logger).sentGreetingLetter(); } @Test public void log_when_sending_love_letters() { sut.send(mock(LoveLetter.class)); verify(logger).sentLoveLetter(); } and the production code: public class MailSender { private final EventLogger eventLogger; public MailSender (final EventLogger eventLogger) { this.eventLogger = eventLogger; } public void send (final GreetingLetter letter) { // more business logic eventLogger.

Craftsmanship analogy

Jul 27, 2015 - 3 minute read - Comments - analogycraftsmanshipsarah-meistage

I’ve found this set of tweets about the craftsmanship analogy by Sarah Mei: Just put my finger on why the craft/workshop metaphor for software development doesn't quite fit. — Sarah Mei (@sarahmei) July 25, 2015 "Craft" doesn't build any collaboration into the process, except in a top-down control-oriented way (master, journeyman, apprentice). — Sarah Mei (@sarahmei) July 25, 2015 "Craft" casts software development as an individual achievement, just as in a workshop, the master did all the important work on each piece.

Faster site generation for Octopress 2

Jul 13, 2015 - 2 minute read - Comments - metaoctopress-2octopress-3octopress

2016-04 update: I’ve discovered that the original Rakefile does a similar job. See here After a while, the generation of the static site using Octopress 2 was starting to be slow (around 2 minutes for 85 posts) for the kind of fast feedback cycle I was expecting. Inspired by their new features in Octopress 3, one of them being faster site generation, I decided to retrofit my installation with the same feature.

What defines a dependency

Jul 13, 2015 - 1 minute read - Comments - goosjavacodefragmentdependencynotificationgooslistenerobject-stereotype

A friend and I were arguing about this code (fragment): public void register (final String userName) { try { registeredUsers.add(new User(userName)); } catch (AlreadyRegisteredUserException e) { resultListener.alreadyRegistered(userName); } } I would have said that resultListener is a dependency as, first, it was injected by the constructor, second, it is necessary for the execution (negative case). He suggested that: being injected through the constructor is usually what happens with dependencies, but does not make it one (i.