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/