如何将字典的键映射到变量

时间:2012-12-19 03:57:10

标签: c# unit-testing dictionary

我正在创建一个单元测试,以查看字典中是否有某个键。这是程序的一部分,涉及向字典添加键/值对:

    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的原因。

3 个答案:

答案 0 :(得分:2)

不只是target2.mEventMap[EvtId.AccessChange]吗?

答案 1 :(得分: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;
    }
    }
}

答案 2 :(得分:0)

不是使用包含进行检查,而是调用 TryGetValue 来检查密钥是否存在,如果存在则还要检索值。

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