c# - RhinoMocks 3.6 的 ArgumentNullException

标签 c# rhino-mocks

Benn 尝试使用 RhinoMocks 3.6 测试返回简单 IList 的服务层方法

[TestMethod]
    public void GetItems_Returns_ActionItemsList()
    {
        // arrange
        var mockRepository = MockRepository.GenerateMock<IActionItemRepository>();
        mockRepository.Stub(s => s.Select()).Return(GetFakeActionItems());

        var service = new ActionItemQueueService(mockRepository);

        // act
        var actual = service.GetItems();

        mockRepository.VerifyAllExpectations();

        // assert
        Assert.IsInstanceOfType(actual, typeof(IList<ActionItem>));
    }

很简单吧? 引用GetFakeActionItems方法;

internal IQueryable<ActionItem> GetFakeActionItems()
    {
        return new List<ActionItem> {            
                                        new ActionItem{
                                            Id = 5,
                                            ClientName = "Bank of American Corporation",
                                            ActionNeeded = RequiredAction.Change,
                                            RecordIndicator = "ROI",
                                            RequestDate = DateTime.Now.AddDays(-3)
                                        } 
        } as IQueryable<ActionItem>;
    }

这是正在测试的类和方法...

public class ActionItemQueueService : IActionQueueService
{
    private readonly IActionItemRepository _actionItemRepository;

    public ActionItemQueueService(IActionItemRepository actionItemRepository)
    {
        _actionItemRepository = actionItemRepository;
        if (_actionItemRepository == null)
        {
            throw new ArgumentNullException("ActionItemRepository");
        }
    }




    public IList<Model.ActionItem> GetItems()
    {
        return _actionItemRepository.Select().ToList<Model.ActionItem>();
    }
}

没有什么狂野的...... 当我运行测试时,当 _actionItemRepository.Select() 触发时调用 GetItems() 方法时,我会收到 ArgumentNullException。值不能为空。 参数名称:来源。

困惑和困惑,想知道是否有人对我所缺少的有任何见解。

非常感谢!

最佳答案

我相信问题是你正在拿你的List<ActionItem>并在 as IQueryable<ActionItem> 中对其执行“GetFakeActionItems ”方法。这将返回 null,因为它不是有效的转换。

因此,当你的模拟 ActionItemRepository运行已 stub 的 Select()它返回 null (通过 GetFakeActionItems ),这会导致后续的 ToList<Model.ActionItem>()ArgumentNullException一起在火焰中消失.

您实际上想在GetFakeActionItems中做什么是:

myList.AsQueryable()

关于c# - RhinoMocks 3.6 的 ArgumentNullException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3302743/

相关文章:

c# - 可以替代链式开关/转到的设计模式?

c# - Rhino 模拟一个抽象类而不模拟它的虚拟方法?

c# - 为什么我的部分模拟会模拟所有虚拟方法,即使没有设置期望?

c# - 如何使用具有 ref bool 参数的 Rhino Mocks 引发事件

c# - 如何检索连接到 Linq .NET 中第一行的一个表行和行列表

c# - 每小时 gRPC 调用出现峰值

c# - 私有(private)类(Class)的公共(public)属性(property)

c# - 将复杂的 XML 反序列化为 C# 对象

asp.net-mvc-4 - 模拟 WebSecurity 提供者

c# - 如何对包含静态方法的方法进行单元测试?