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.

Object Peer Stereotypes

Jul 13, 2015 - 2 minute read - Comments - goosobject-peer-stereotypedependencynotificationadjustment

We categorize an object’s peers (loosely) into three types of relationship. An object might have: Dependencies: Services that the object requires from its peers so it can perform its responsibilities. The object cannot function without these services. It should not be possible to create the object without them. For example, a graphics package will need something like a screen or canvas to draw on–it doesn’t make sense without one.