### Question:
DefaultToolchain implements Toolchain, ToolchainPrivate { @Override public boolean matchesRequirements( Map<String, String> requirements ) { for ( Map.Entry<String, String> requirement : requirements.entrySet() ) { String key = requirement.getKey(); RequirementMatcher matcher = provides.get( key ); if ( matcher == null ) { getLog().debug( "Toolchain " + this + " is missing required property: " + key ); return false; } if ( !matcher.matches( requirement.getValue() ) ) { getLog().debug( "Toolchain " + this + " doesn't match required property: " + key ); return false; } } return true; } protected  DefaultToolchain( ToolchainModel model, Logger logger ); protected  DefaultToolchain( ToolchainModel model, String type, Logger logger ); @Override final String getType(); @Override final ToolchainModel getModel(); final void addProvideToken( String type, RequirementMatcher matcher ); @Override boolean matchesRequirements( Map<String, String> requirements ); @Override boolean equals( Object obj ); @Override int hashCode(); @Override String toString(); static final String KEY_TYPE; }### Answer:
@Test public void testMissingRequirementProperty() { ToolchainModel model = new ToolchainModel(); model.setType( "TYPE" ); DefaultToolchain toolchain = newDefaultToolchain( model ); assertFalse( toolchain.matchesRequirements( Collections.singletonMap( "name", "John Doe" ) ) ); verify( logger ).debug( "Toolchain type:TYPE{} is missing required property: name" ); }