我被这个彻底搞糊涂了。我正在运行一个完整的单元测试包。以下是许多 JUnit 测试使用的相关共享代码:
private static Map<String, JAXBContext> jaxbContexts =
new HashMap<String, JAXBContext>();
private synchronized JAXBContext getJAXBContext(Class clazz) throws JAXBException {
JAXBContext context = null;
if (jaxbContexts.containsKey(clazz.getName())) {
context = jaxbContexts.get(clazz.getName());
} else {
context = JAXBContext.newInstance(clazz);
System.out.println("Created new context for '" + clazz.getName() + "'");
jaxbContexts.put(clazz.getName(), context);
}
return context;
}
JUnit 运行的控制台输出包括以下两个连续条目:
Created new context for 'com.somecompany.xmlschema.providepensionpaymentinfo.Interface'
Created new context for 'com.somecompany.xmlschema.providepensionpaymentinfo.Interface'
我错过了什么?为什么jaxbContexts.containsKey()
在这种情况下对于基于字符串的键不起作用,与 JUnit 执行期间的其他 46 次不同?我们没有并行运行我们的测试,但如果这会产生影响,我们会使用 Aspects。