AbstractExecution implements Execution<T> { @Override public String toString() { return "<execute>(" + dependencies.stream().map(d -> d.getNode().getRepresentedType().getSimpleName() + "[" + d.getRequiredState().name().toLowerCase() + "]" ).collect(joining(", ")) + ")"; } AbstractExecution(
            Class<T> type, 
            State state, 
            Set<Dependency> dependencies,
            MissingArgumentStrategy missingArgumentStrategy); String getName(); @Override final Class<T> getType(); @Override final State getState(); @Override final Set<Dependency> getDependencies(); @Override MissingArgumentStrategy getMissingArgumentStrategy(); @Override String toString();  }
@Test void testToString() { final String toString = instance.toString(); assertTrue(toString.toLowerCase().contains(STATE_REQUIRED.name().toLowerCase())); assertTrue(toString.contains(Integer.class.getSimpleName())); }