我正在创建一个单元测试,以查看字典中是否有某个键。这是程序的一部分,涉及向字典添加键/值对:
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的原因。
答案 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);
}