Joh*_*din 5 c# generics unit-testing moq expression-trees
我正在尝试创建一个通用的测试类来测试我的通用控制器.一切都工作正常,除了这个:我有一个像这样的方法:
private T GetSingle(Expression<Func<T, bool>> expression)
Run Code Online (Sandbox Code Playgroud)
我正试图像这样设置测试:
var Guids = new[] { Guid.NewGuid(), Guid.NewGuid() };
var items = Guids.Select(x => new T {Id = x});
var mock = new Mock<IRepository<T>>();
mock.Setup(m => m.GetSingle(
It.IsAny<Expression<Func<T, bool>>>()))
.Returns(new T());
Run Code Online (Sandbox Code Playgroud)
并执行这样的测试:
var value = Repository.GetSingle(x=> x.Id == Guid.NewGuid());
Run Code Online (Sandbox Code Playgroud)
这总是会带来新的T.
我的设置错了吗?
您正在指示Moq返回相同的实例(在本例中new T())GetSingle,无论提供何种表达式,都会调用任何时间.你真正想要的是它调用该表达式items:
mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
.Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1988 次 |
| 最近记录: |