【问题标题】:Hamcrest JDK7 migrationHamcrest JDK7 迁移
【发布时间】:2013-12-27 16:31:48
【问题描述】:

您好,我尝试将项目从 java 6 迁移到 java 7 (JDK1.7.0_21)。 在一项测试中,我发现失败了。

更新: 我调试了这个问题。我到了 ReflectiveTypeFinder.findExpectedType。

public Class<?> findExpectedType(Class<?> fromClass) {
for (Class<?> c = fromClass; c != Object.class; c = c.getSuperclass()) {
    for (Method method : c.getDeclaredMethods()) {
        if (canObtainExpectedTypeFrom(method)) {
            return expectedTypeFrom(method);
        }
    }
}
throw new Error("Cannot determine correct type for " + methodName + "() method.");

}

JDK6 和 JDK7 之间是从 c.getDeclaredMethods() 得到的不同顺序。我在两个版本上都进行了即时检查,这两种方法都会通过条件,所以只有哪个方法会在列表中排在第一位才重要。

更新的问题是:hamcrest 方法是否应该检查更多内容,或者我扩展 CustomTypeSafeMatcher 的类写得不好?

我的 MyMatchedObjectMatcher 有两个 matchesSafely 方法:

@Override
protected boolean matchesSafely(MyMatchedObject actualObject) {(...)}

protected boolean matchesSafely(List<MyMatchedObject> actualObjectList) {(...)}

我发现的最近报告的问题是:https://github.com/hamcrest/JavaHamcrest/issues/30。 但是由于内部 java 方法的意外行为,我认为这可能不是 Hamcrest 问题..

使用 Hamcrest 1.3

【问题讨论】:

标签: migration java-7 java-6 hamcrest


【解决方案1】:

我公司的大学解决了这个问题。

hamcrest 中的约定是使用一种匹配方法。但它可以写得更好,例如。检查方法是否有覆盖注释。

我的解决方案是删除第二种方法(也可以重命名)。在 JDK6 上它很幸运;)。

PS:谢谢乔的鼓励。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2020-06-22
    • 2019-12-27
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多