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>();
}
}没有什么野性..。当我运行我的测试时,当GetItems()方法在_actionItemRepository.Select()触发时被调用时,我会得到一个ArgumentNullException。值不能为空。参数名称: source。
困惑和困惑,想知道是否有人对我错过的东西有任何洞察。
非常感谢!
发布于 2010-07-22 03:21:46
我认为问题在于您正在使用List<ActionItem>,并在GetFakeActionItems方法中对其执行"as IQueryable<ActionItem>“。这将返回null,因为它不是有效的转换。
因此,当您的模拟ActionItemRepository运行存根输出的Select()时,它会返回null (通过GetFakeActionItems),这会导致后续的ToList<Model.ActionItem>()与ArgumentNullException一起失效。
你真正想要在你的GetFakeActionItems中做的是:
myList.AsQueryable()https://stackoverflow.com/questions/3302743
复制相似问题