我的模拟测试是KeyNotFoundException
分:
[Fact]
public void MockAssembly_GetTypes_ReturnsMockedTypes()
{
var mockAssembly = new Mock<Assembly>();
mockAssembly.Setup(a => a.GetTypes()).Returns(new Type[] { typeof(MyClass) });
var mockAssemblyObject = mockAssembly.Object;
var assemblyDictionary = new Dictionary<Assembly, HashSet<Type>>();
if (!assemblyDictionary.TryGetValue(mockAssemblyObject, out var types))
{
types = new HashSet<Type>(mockAssemblyObject.GetTypes());
assemblyDictionary[mockAssemblyObject] = types;
}
Assert.Contains(mockAssemblyObject, assemblyDictionary.Keys);
Assert.Single(assemblyDictionary[mockAssemblyObject]);
}
System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键"".
在Assert.Single(assemblyDictionary[mockAssemblyObject]);
号线上
即使嘲笑GetHashCode
也无济于事--它仍然试图使用空键.
为什么会发生这种事?
编辑:
进一步的测试表明,如果我调用assemblyDictionary.TryGetValue(mockAssemblyObject, out var myTypes);
,即使在我使用assemblyDictionary.Add(mockAssemblyObject, types)
添加之后,结果也是假的和空的.