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。值不能为空。 参数名称:source。
困惑和困惑,想知道是否有人对我所缺少的东西有任何见解。
非常感谢!
答案 0 :(得分:3)
我认为问题在于您正在List<ActionItem>
方法中使用as IQueryable<ActionItem>
并执行“GetFakeActionItems
”。这将返回null,因为它不是有效的转换。
因此,当你的模拟ActionItemRepository
运行存根Select()
时,它会返回null(通过GetFakeActionItems
),这会导致随后的ToList<Model.ActionItem>()
在火焰中熄灭ArgumentNullException
。
您在GetFakeActionItems
中实际想要做的是:
myList.AsQueryable()