首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RhinoMocks 3.6的ArgumentNullException

使用RhinoMocks 3.6的ArgumentNullException
EN

Stack Overflow用户
提问于 2010-07-22 02:56:47
回答 1查看 874关注 0票数 2

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

代码语言:javascript
运行
复制
[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方法;

代码语言:javascript
运行
复制
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>;
    }

下面是测试中的类和方法...

代码语言:javascript
运行
复制
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>();
    }
}

没有什么野性..。当我运行我的测试时,当GetItems()方法在_actionItemRepository.Select()触发时被调用时,我会得到一个ArgumentNullException。值不能为空。参数名称: source。

困惑和困惑,想知道是否有人对我错过的东西有任何洞察。

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-22 03:21:46

我认为问题在于您正在使用List<ActionItem>,并在GetFakeActionItems方法中对其执行"as IQueryable<ActionItem>“。这将返回null,因为它不是有效的转换。

因此,当您的模拟ActionItemRepository运行存根输出的Select()时,它会返回null (通过GetFakeActionItems),这会导致后续的ToList<Model.ActionItem>()ArgumentNullException一起失效。

你真正想要在你的GetFakeActionItems中做的是:

代码语言:javascript
运行
复制
myList.AsQueryable()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3302743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档