我完全被這個弄糊塗了。我正在運行一整套完整的單元測試。以下是有關共享代碼被使用一些JUnit測試:什麼會導致HashMap containsKey()失敗並以String爲關鍵字?
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。
您確定這兩行之間沒有停止/啓動JVM嗎? – Pointy 2011-01-20 14:20:59