2012-12-19 98 views
0

我正在創建一個單元測試,以查看字典中是否包含某個鍵。這裏是包括添加鍵/值對的字典中的程序的一部分:如何將字典的鍵映射到變量

public void Subscribe(EvtId inEvent, EvtDelegate inCallbackMethod) 
    { 
     if(mEventMap.ContainsKey(inEvent)) 
     { 
      mEventMap[inEvent] += inCallbackMethod; 
     } 
     else 
     { 
      mEventMap.Add(inEvent, inCallbackMethod); 
     } 
    } 

這裏是一塊的單元測試代碼:

public void SubscribeTest() 
    { 
     EventHandlerCs target = new EventHandlerCs(eLayer.1stLayer); 

     target.Subscribe(EvtId.AccessChange, AccessChangeVT); 

     EventHandlerCs_Accessor target2 = new EventHandlerCs_Accessor(eLayer.1stLayer); 

     EvtId expectedEvt = EvtId.AccessChange; 
     EvtId actualEvt; 

     if (target2.mEventMap.ContainsKey(EvtId.AccessChange)) 
     { 
      // ??? 
      // Assert.AreEqual(expectedEvt, actualEvt); 
     } 
    } 

如何映射的實際值密鑰/密鑰本身(一旦我在字典中使用ContainsKey方法找到它)變爲單元測試代碼中的actualEvt變量?

如果您需要,請隨時索取更多有關此問題的信息。

更新:有問題的字典設置爲private,所以這就是爲什麼我必須使用Accessor。

回答

2

是不是隻是target2.mEventMap[EvtId.AccessChange]

+0

這就是我的想法,但它不能這麼容易。必須有其他事情在這個問題上沒有明確說明。 – siride

+0

我知道,但我認爲我應該問問:) –

+0

我試過了,但是它的功能是獲得與密鑰相關的值。 @siride,你有什麼想法?我非常樂意澄清這個問題。 – Anthony

0

我會使用字典上的TryGetValue函數。可以在這裏找到一個很好的解釋。

http://www.dotnetperls.com/trygetvalue

class Program 
{ 
    static void Main() 
    { 
    var d = new Dictionary<string, int>(); 
    d.Add("key", 0); 
    // This code does two hash lookups. 
    int value; 
    if (d.TryGetValue("key", out value)) 
    { 
     d["key"] = value + 1; 
    } 
    } 
} 
0

而是與檢查包含呼叫TryGetValue,以檢查是否存在關鍵並且如果它檢索值。

if (target2.mEventMap.TryGetValue(EvtId.AccessChange, out actualEvt)) 
{ 
     Assert.AreEqual(expectedEvt, actualEvt); 
} 
+0

'TryGetValue'獲取與密鑰關聯的值。我對任何關鍵的價值都不感興趣,我只是對關鍵本身感興趣。 – Anthony

+0

您已經擁有密鑰,它基於即使在ContainsKey中搜索的密鑰。你已經擁有的鑰匙是字典中的同一把鑰匙。 – Sharkz