### Question:
StringIdQuery implements Query { public Collection<String> getStringIds() { return stringIds; } StringIdQuery(String... stringIds);  StringIdQuery(Collection<String> stringIds); Collection<String> getStringIds(); void addStringIds(String... ids); QueryMetadata getMetaData(EntityResolver resolver); void route(QueryRouter router, EntityResolver resolver, Query substitutedQuery); SQLAction createSQLAction(SQLActionVisitor visitor);  }### Answer:
@Test public void testConstructor() { StringIdQuery q1 = new StringIdQuery(); assertEquals(0, q1.getStringIds().size()); StringIdQuery q2 = new StringIdQuery("a", "b", "c", "c"); assertEquals(3, q2.getStringIds().size()); assertTrue(q2.getStringIds().contains("a")); assertTrue(q2.getStringIds().contains("b")); assertTrue(q2.getStringIds().contains("c")); StringIdQuery q3 = new StringIdQuery(Arrays.asList("a", "b", "b", "c")); assertEquals(3, q3.getStringIds().size()); assertTrue(q3.getStringIds().contains("a")); assertTrue(q3.getStringIds().contains("b")); assertTrue(q3.getStringIds().contains("c")); }