【发布时间】:2010-07-21 18:56:46
【问题描述】:
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。值不能为空。 参数名称:来源。
困惑和困惑,想知道是否有人对我所缺少的有任何见解。
非常感谢!
【问题讨论】:
-
你不应该做类似 fakeItems = GetFakeActionItems(); ... Stub(...).Return(fakeItems)?
-
技术上?当然。但这对使用相同 ArgumentNullException 的测试方法没有影响。 :(
-
在 MockRepository.GenerateMock
(null) 中传递 null 是否有原因? -
是我在发布之前未能删除的问题。无论有没有我都使用相同的 ArgumentNullException。让我从帖子中删除它。
-
这里可能是一个愚蠢的角度,但你能告诉我们GetFakeActionItems吗?
标签: c# rhino-mocks