### Question:
JCRNodeChangeEventHandler implements EventHandler, ResourceChangeListener, ExternalResourceChangeListener { @Override public void onChange(List<ResourceChange> changes) { for (ResourceChange change : changes) { handlePath(change.getPath()); } }  @Override void handleEvent(final Event event); @Override void onChange(List<ResourceChange> changes);  }### Answer:
@Test public void testObservation() { aemContext.registerInjectActivateService(eventHandler, ResourceChangeListener.PATHS, new String[] {"/content", "/etc"}); eventHandler.onChange(Collections.singletonList(new ResourceChange(ChangeType.CHANGED, DUMMY_PATH, false, null, null, null))); Map<String, Object> expectedPayload = Collections.singletonMap(CacheInvalidationJobConstants.PAYLOAD_KEY_DATA_CHANGE_PATH, DUMMY_PATH); verify(jobManager).addJob(CacheInvalidationJobConstants.TOPIC_HTTP_CACHE_INVALIDATION_JOB, expectedPayload); }