c# - "ToDictonary"在模拟对象上使用时抛出异常

标签 c# unit-testing mocking moq

我有这个抽象类

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/

相关文章:

c# - 在我的蓝牙 LE 设备上,我可以更改外围设备上的特征属性吗?

Python单元测试: how to test function that calls other function?

c# - 如何在 Windows Phone 8.1 RT 中进行单元测试?

java - JUnit 测试抛出异常的方法

c# - 单元测试 SqlFunctions

java - 如何在 Java 中使用模拟 Akka actor 进行正确测试?

java - 如何忽略 JUnit/easymock 中的意外方法调用?

c# - ASP .NET 中的首选验证

c# - 以编程方式检索 Outlook 照片,无需最终用户登录

c# - 如何检查工作表是否已存在于 Interop 中