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,所以这就是我必须使用访问器的原因。

4

3 回答 3

2

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

于 2012-12-19T04:04:17.993 回答
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;
    }
    }
}
于 2012-12-19T04:31:43.950 回答
0

代替检查Contains调用TryGetValue来检查键是否存在,如果存在则检索值。

 if (target2.mEventMap.TryGetValue(EvtId.AccessChange, out actualEvt))
{
        Assert.AreEqual(expectedEvt, actualEvt);
}
于 2012-12-19T04:53:19.233 回答