### Question:
Instructions { public static Properties mergeAndSkipExisting(Properties props1, Properties props2) { Properties properties = new Properties(); properties.putAll(props1); for (String key : props2.stringPropertyNames()) { if (!props1.containsKey(key) && !Strings.isNullOrEmpty(props2.getProperty(key))) { properties.put(key, props2.getProperty(key)); } } return properties; } private  Instructions(); static Properties merge(Properties properties, File extra); static Properties mergeAndOverrideExisting(Properties props1, Properties props2); static Properties mergeAndSkipExisting(Properties props1, Properties props2); static Properties load(File file); static Properties sanitize(Properties properties);  }### Answer:
@Test public void testMergeAndSkipExisting() throws Exception { Properties props1 = new Properties(); props1.put("A", "a"); props1.put("B", "b"); Properties props2 = new Properties(); props2.put("A", "aa"); props2.put("C", "c"); assertThat(Instructions.mergeAndSkipExisting(props1, props2)) .hasSize(3) .containsKeys("A", "B", "C") .containsEntry("A", "a"); assertThat(Instructions.mergeAndSkipExisting(props1, new Properties())) .hasSize(2) .containsKeys("A", "B") .containsEntry("A", "a"); assertThat(Instructions.mergeAndSkipExisting(new Properties(), props2)) .hasSize(2) .containsKeys("A", "C") .containsEntry("A", "aa"); }