Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

пятница, 8 мая 2015 г.

Красивый assertThat в стиле Mockito

На ночь глядя взялся реализовать двусвязный список на 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;
                    }
                });
    }
Приятного!

1 комментарий: