### Question:
Strings { public static <T> String joinBy(String separator, T... joinees) { if (joinees == null || joinees.length == 0) return ""; separator = Args.proper(separator, ""); if (joinees.length == 1) { return joinees[0].toString(); } else { StringBuilder joined = new StringBuilder(); joined.append(joinees[0]); for (int i = 1; i < joinees.length; i++) { joined.append(joinees[i - 1].equals("") ? "" : separator).append(joinees[i]); } return joined.toString(); } } private  Strings(); static String substitute(String string, Map<String, ? extends Object> replace); static String substitute(String string, Map<String, ? extends Object> replace, Locale locale); static String findPlaceHolder(String string); static String clearEscapedPlaceHolder(String dirty); static T proper(T returnIfNotEmpty, T alternative); static String toCamel(String snake); static String toSnake(String camel); static String join(T... joinees); static String joinBy(String separator, T... joinees); static String join(List<T> joinees); static String joinBy(String separator, List<T> joinees); static boolean isBlank(CharSequence suspect); static boolean containBlank(CharSequence suspect); static String removeBlanks(CharSequence target); static boolean isEmpty(CharSequence suspect); static boolean isEmpty(CharSequence suspect, boolean removeBlanks); static String reverse(String reversee); static String trim(String target); static String[] split(String regex, String target); static boolean equalsIgnoreCase(String source, String destination); static boolean startsWith(String text, String prefix); static boolean startsWith(String text, String prefix, boolean textCompare); static boolean endsWith(String text, String prefix); static boolean endsWith(String text, String prefix, boolean textCompare); static String escapeHTML(CharSequence html); static String escapeRegex(CharSequence text);  }### Answer:
@Test public void 無要素リストjoinテスト() { String expected = ""; String actual = Strings.joinBy(":", Lists.gen()); assertEquals(expected, actual); }
@Test public void 配列joinテスト() { String expected = "A:B:C:D:E"; String actual = Strings.joinBy(":", Arrays.gen("A", "B", "C", "D", "E")); assertEquals(expected, actual); }
@Test public void 単要素配列joinテスト() { String expected = "A"; String actual = Strings.joinBy(":", Arrays.gen("A")); assertEquals(expected, actual); }
@Test public void 空要素を含む配列joinテスト() { String expected = "A"; String actual = Strings.joinBy(":", Arrays.gen("", "A")); assertEquals(expected, actual); }
@Test public void 無要素配列joinテスト() { String expected = ""; String actual = Strings.joinBy(":", Arrays.gen()); assertEquals(expected, actual); }
@Test public void リストjoinテスト() { String expected = "A:B:C:D:E"; String actual = Strings.joinBy(":", Lists.gen("A", "B", "C", "D", "E")); assertEquals(expected, actual); expected = "ABCDE"; actual = Strings.joinBy(null, Lists.gen("A", "B", "C", "D", "E")); assertEquals(expected, actual); }
@Test public void 単要素リストjoinテスト() { String expected = "A"; String actual = Strings.joinBy(":", Lists.gen("A")); assertEquals(expected, actual); }