### Question:
Columns implements Iterable<Column> { public String namesJoint(String separator) { List<String> list = new ArrayList<String>(columns.length); for (Column each : columns) list.add(each.name()); return StringUtils.join(list, separator); } Columns(Column... columns);  Columns(Collection<Column> columns); boolean contains(Column column); boolean contains(Columns columns); Iterator<Column> iterator(); int count(); String namesJoint(String separator); String namesJoint(String template, String separator); Columns exclude(Columns toexclude); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString();  }### Answer:
@Test public void namesJoint_returnsTwoNamesSeparatedByComma() { assertEquals("name,birth_date", new Columns(NAME, BIRTH_DATE).namesJoint(",")); }
@Test public void namesJoint_returnsOnlyOneName() { assertEquals("name", new Columns(NAME).namesJoint(",")); }
@Test public void namesJoint_returnsNameMatchingTemplate() { assertEquals("name = ?,birth_date = ?", new Columns(NAME, BIRTH_DATE).namesJoint("${name} = ?", ",")); }