Соответствие свойств класса LambdaJ - PullRequest
2 голосов
/ 11 октября 2011

Я пытаюсь написать сопоставитель Hamcrest, чтобы проверить возвращаемое значение метода, который возвращает объект Class. Например, учитывая класс:

public static class ClassHolder {
    private final Class clazz;

    public ClassHolder(Class clazz) {
        this.clazz = clazz;
    }

    public Class getClazz() {
        return clazz;
    }
}

У меня есть тест, который создает совпадение Hamcrest, соответствующее результату вызова getClazz():

public class LambdaJTest {
    @Test
    public void testClassHolder() {
        final ClassHolder classHolder = new ClassHolder(String.class);
        assertThat(classHolder, having(on(ClassHolder.class).getClazz(), is(String.class)));
    }
}

Однако этот сопоставитель выдает исключение при выполнении:

ch.lambdaj.function.argument.ArgumentConversionException: It is not possible to create a placeholder for class: java.lang.Class
    at ch.lambdaj.function.argument.ArgumentsFactory.createArgumentPlaceholder(ArgumentsFactory.java:170)
    at ch.lambdaj.function.argument.ArgumentsFactory.createArgumentPlaceholder(ArgumentsFactory.java:156)
    at ch.lambdaj.function.argument.ArgumentsFactory.createPlaceholder(ArgumentsFactory.java:52)
    at ch.lambdaj.function.argument.ArgumentsFactory.registerNewArgument(ArgumentsFactory.java:45)
    at ch.lambdaj.function.argument.ArgumentsFactory.createArgument(ArgumentsFactory.java:39)
    at ch.lambdaj.function.argument.ProxyArgument.invoke(ProxyArgument.java:36)
    at ch.lambdaj.proxy.InvocationInterceptor.intercept(InvocationInterceptor.java:42)

Есть ли способ написать такое сопоставление, используя LambdaJ?

1 Ответ

0 голосов
/ 17 октября 2011

Вам не нужен лямбдай, чтобы достичь этого. Это можно сделать с помощью instanceOf matcher следующим образом:

assertThat (classHolder.getClazz (), Matchers.instanceOf (String.class)));

...