【问题标题】:LambdaJ class property matcherLambdaJ 类属性匹配器
【发布时间】:2011-10-11 14:21:40
【问题描述】:

我正在尝试编写一个 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 编写这样的匹配器?

【问题讨论】:

    标签: java hamcrest lambdaj


    【解决方案1】:

    您不需要 lambdaj 来实现这一点。可以通过使用instanceOf matcher 来做到这一点,如下所示:

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

    【讨论】:

    • 你说得对——我不需要 LambdaJ;但是我的问题专门询问了如何使用 LambdaJ 来做到这一点。假设ClassHolder 包含另一个字段,我想编写一个匹配器来匹配getClazz 的返回值和这个新字段。 LambdaJ 为编写此类匹配器提供了简洁的语法,但它不适用于返回 Class 对象的方法。
    • 这似乎是 LambdaJ 的限制,所以我接受了这个答案,因为它是一个明智的解决方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2014-09-17
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    相关资源
    最近更新 更多