我不開心處理與以下把東西在地圖<?,?>或轉換地圖<String,字符串>到地圖<?,?>
public Map<?, ?> getMap(String key);
我想要編寫單元測試消耗這個定義的接口人接口。
Map<String,String> pageMaps = new HashMap<String,String();
pageMaps.put(EmptyResultsHandler.PAGEIDENT,"boogie");
pageMaps.put(EmptyResultsHandler.BROWSEPARENTNODEID, "Chompie");
Map<?,?> stupid = (Map<?, ?>)pageMaps;
EasyMock.expect(config.getMap("sillyMap")).andReturn(stupid);
並且編譯器正在編程。
The method andReturn(Map<capture#5-of ?,capture#6-of ?>) in the type IExpectationSetters<Map<capture#5-of ?,capture#6-of ?>> is not applicable for the arguments (Map<capture#7-of ?,capture#8-of ?>)
如果我嘗試直接使用pageMaps
,它告訴我:
The method andReturn(Map<capture#5-of ?,capture#6-of ?>) in the type IExpectationSetters<Map<capture#5-of ?,capture#6-of ?>> is not applicable for the arguments (Map<String,String>)
如果我做一個pageMaps
Map<?,?>
,我不能把字符串這裏面。
The method put(capture#3-of ?, capture#4-of ?) in the type Map<capture#3-of ?,capture#4-of ?> is not applicable for the arguments (String, String)
我已經看到了一些客戶端代碼,不會醜選中轉換,像
@SuppressWarnings("unchecked")
final Map<String, String> emptySearchResultsPageMaps = (Map<String, String>) conf.getMap("emptySearchResultsPage");
如何獲得的數據爲Map<?,?>
,或將我Map<String,String>
到Map<?,?>
?
這裏有一種混淆:你嘗試說服編譯器愚蠢是一個帶有2個類型參數的Map *你不關心*,但是,儘管如此,你仍然使用Map類型的Map 。但是你應該做的是測試這個接口適用於你需要的任何類型的組合。 –
Ingo
2013-02-24 10:17:16
如果讓它返回'pageMaps',會發生什麼? 'EasyMock.expect(config.getMap(「sillyMap」))。andReturn(pageMaps);' – 2013-02-24 10:20:21
我只關心它作爲一個Map來進行這個測試,但這是無關緊要的。如果我無法獲取數據,我不知道如何「測試該接口適用於我需要的任何類型的組合」。如果我使地圖完全通用,put()拒絕工作。 –
2013-02-24 10:23:25