На ночь глядя взялся реализовать двусвязный список на Java. Пишу тест
@Test public void testAddAtAtEnd() { List<String> list = get(); list.add("1"); assertEquals("[1]", list.toString()); list.add("2"); assertEquals("[1, 2]", list.toString()); list.add("3"); assertEquals("[1, 2, 3]", list.toString()); list.add("4"); assertEquals("[1, 2, 3, 4]", list.toString()); }Неуклюже и некрасиво! Хочу так!!
@Test public void testAddAtAtEnd() { List<String> list = get(); assertAfter("[1]", list).add("1"); assertAfter("[1, 2]", list).add("2"); assertAfter("[1, 2, 3]", list).add("3"); assertAfter("[1, 2, 3, 4]", list).add("4"); assertAfter("[1, 2, 3, 4, 5]", list).add("5"); assertAfter("[1, 2, 3, 4, 5, 6]", list).add("6"); assertAfter("[1, 2, 3, 4, 5, 6, 7]", list).add("7"); }Для этого мне надо вот
private <T> T assertAfter(final String expected, final T object) { return (T) Proxy.newProxyInstance(this.getClass().getClassLoader(), object.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object invoke = method.invoke(object, args); assertEquals(expected, object.toString()); return invoke; } }); }Приятного!
Круто выглядит.
ОтветитьУдалитьСпасибо!