### Question:
ModuleDescriptorOfClassPredicate implements ModuleDescriptorPredicate<T> { public boolean matches(final ModuleDescriptor<? extends T> moduleDescriptor) { return (moduleDescriptor != null) && CollectionUtils.exists(moduleDescriptorClasses, new Predicate() { public boolean evaluate(final Object object) { return (object != null) && ((Class<?>) object).isInstance(moduleDescriptor); } }); } ModuleDescriptorOfClassPredicate(final Class<? extends ModuleDescriptor<? extends T>> moduleDescriptorClass);  ModuleDescriptorOfClassPredicate(final Class<? extends ModuleDescriptor<? extends T>>[] moduleDescriptorClasses); boolean matches(final ModuleDescriptor<? extends T> moduleDescriptor);  }### Answer:
@Test public void testDoesNotMatchModuleWithModuleDescriptorClassExtendingButNotExactlyMatchingClass() { assertTrue(moduleDescriptorPredicate.matches(new ModuleDescriptorStubB())); }
@Test public void testDoesNotMatchModuleWithModuleDescriptorClassNotMatchingClass() { assertFalse(moduleDescriptorPredicate.matches(new MockUnusedModuleDescriptor())); }
@Test public void testMatchesModuleWithModuleDescriptorClassExactlyMatchingClass() { assertTrue(moduleDescriptorPredicate.matches(new ModuleDescriptorStubA())); }