我有这个抽象类
public abstract class DisposableList<T> : List<T>, IDisposable
{
protected DisposableList();
public virtual void Dispose();
}
和这个界面
public interface IGroup : IDisposable
{
string Name { get; }
}
我需要测试这个方法
public class MyClass
{
public void MyMethod(IConnection connection)
{
var groups = connection.GetGroups();
var grps = groups.ToDictionary(x => x?.Name); //Here gets System.NullReference exception
}
}
在测试中,到目前为止我所做的是:
var group1 = new Mock<IGroup>();
group1.SetupGet(c => c.Name).Returns("abc");
var groups = new Mock<DisposableList<IGroup>>();
groups.Object.Add(group1.Object);
Mock<IConnection> connection.Setup(c => c.GetGroups()).Returns(() => groups.Object);
new MyClass().MyMethod(connection);
但是var grps = groups.ToDictionary(x => x?.Name);
得到 System.NullReferenceException: 'Object reference not set to an instance of an object.'
Name
不为空且 groups
不为空。里面发生了一些事情。
我该如何解决这个问题?
最佳答案
您不能像这样将空值设置为字典键; (可以为null)
groups.ToDictionary(x => x?.Name);
消除为 null 或具有 null Name
值的项。
groups.Where(x => x != null && !string.IsNullOrEmpty(x.Name)).ToDictionary(x => x.Name);
关于c# - "ToDictonary"在模拟对象上使用时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47672741/