【发布时间】: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
【问题讨论】:
-
expectedType是什么类?item的值是如何定义的? -
我的版本在这里:code.google.com/p/hamcrest/downloads/… 网络源我只找到了实际的主干:code.google.com/p/hamcrest/source/browse/trunk/hamcrest-java/… 空闲时我会创建演示测试。
标签: migration java-7 java-6 hamcrest