Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字典的键映射到变量_C#_Unit Testing_Dictionary - Fatal编程技术网

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

C# 如何将字典的键映射到变量,c#,unit-testing,dictionary,C#,Unit Testing,Dictionary,我正在创建一个单元测试,看看字典里面是否有某个键。以下是程序的一部分,该部分涉及将键/值对添加到字典: public void Subscribe(EvtId inEvent, EvtDelegate inCallbackMethod) { if(mEventMap.ContainsKey(inEvent)) { mEventMap[inEvent] += inCallbackMethod; }

我正在创建一个单元测试,看看字典里面是否有某个键。以下是程序的一部分,该部分涉及将键/值对添加到字典:

    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
方法在字典中找到它)映射到单元测试代码中的
actualvt
变量

如果需要,请随时询问有关该问题的更多信息


更新:所讨论的字典设置为
private
,所以这就是我必须使用访问器的原因。

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

我会在字典上使用TryGetValue函数。这里可以找到一个很好的解释

类程序
{
静态void Main()
{
var d=新字典();
d、 添加(“键”,0);
//此代码执行两次哈希查找。
int值;
if(d.TryGetValue(“键”,输出值))
{
d[“键”]=值+1;
}
}
}

调用TryGetValue检查键是否存在,如果存在,则检索值,而不是使用包含进行检查

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

我也是这么想的,但不可能这么容易。问题中肯定还有其他问题没有明确说明。我知道,但我想我还是应该问:)我已经尝试过了,但它所做的是获取与键关联的值@siride,你有什么想法?我非常愿意澄清这个问题。但密钥的值不是总是
EvtId.AccessChange
?@GlennSlaven-对不起,你把我弄丢了>\ulol一旦它出现在字典里,是的,它总是
EvtId。AccessChange
TryGetValue
获取与键关联的值。我对键的值不感兴趣,我只对键本身感兴趣。你已经有了键,它基于你在Containeskey中搜索的键。您已经拥有的密钥与字典中的密钥相同。
 if (target2.mEventMap.TryGetValue(EvtId.AccessChange, out actualEvt))
{
        Assert.AreEqual(expectedEvt, actualEvt);
}