We probably want a test like:

    @Test
    public void testLoadTypes() {
        loadTypesOnlyCatalog();
        BrooklynCatalog c = typesCatalog;
        
        Iterable<CatalogItem<Object>> apps = c.getCatalogItems(Predicates.instanceOf(CatalogTemplateItemDto.class));
        // TODO assert has found apps
    }

    @SuppressWarnings("deprecation")
    private synchronized void loadTypesOnlyCatalog() {
        if (typesCatalog!=null) return;
        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
        props.put(LocalManagementContext.BROOKLYN_CATALOG_URL.getName(), 
                "data:,"+URLEncoder.encode("<catalog><classpath scan=\"types\"/></catalog>"));
        typesCatalog = new LocalManagementContext(props).getCatalog();        
        log.info("ENTITIES loaded with annotation: "+typesCatalog.getCatalogItems(Predicates.alwaysTrue()));
    }

I also tested this with:

    @Catalog(description="Some silly app test using interface")
    @ImplementedBy(MySillyAppTemplateWithInterfaceImpl.class)
    public interface MySillyAppTemplateWithInterface extends Application {
    }

    public static class MySillyAppTemplateWithInterfaceImpl extends AbstractApplication implements MySillyAppTemplateWithInterface {
        @Override
        public void init() {
            // no-op
        }
    }