最小起订量回显 IEnumerable 返回空?
Moq to echo IEnumerable back out returning empty?
我正在尝试设置一个模拟对象,以便它仅将输入变量之一回显给调用者。
_resultThrottler = new Mock<IResultThrottler>();
_resultThrottler
.Setup(x => x.Throttle(It.IsAny<IEnumerable<ProductResult>>(), It.IsAny<Guid>()))
.Returns((IEnumerable<ProductResult> input, Guid resultSetId) => input );
然而当它被实际调用时输出总是空的。
var throttledResults = _resultThrottler.Throttle(results, resultSetId).ToList();
我可能做错了什么?
编辑:根据要求:
public interface IResultThrottler
{
IEnumerable<TType> Throttle<TType>(IEnumerable<TType> collectionToThrottle,
Guid sessionId) where TType : ProductResult;
}
变量 results
的完整初始化序列相当复杂,但在测试中它作为长度为 5 的 System.Collections.Generic<IEnumerable<(type that inherits from ProductResult)>>
类型的对象进入,并从模拟对象中出来长度为零。
Moq 似乎不喜欢我尝试使用继承类型而不是实际特定类型进行模拟。
我已移动代码以获取类型参数 -
public class ResultThrottlerStubBuilder<TType> where TType : ProductResult
{
private Mock<IResultThrottler> _resultThrottler;
public IResultThrottler Build()
{
_resultThrottler = new Mock<IResultThrottler>();
_resultThrottler
.Setup(x => x.Throttle(It.IsAny<IEnumerable<TType>>(), It.IsAny<Guid>()))
.Returns((IEnumerable<TType> input, Guid resultSetId) => input );
return _resultThrottler.Object;
}
}
并更改了测试代码以匹配,现在测试通过了。感谢评论者将我的想法推向正确的方向:-)
我正在尝试设置一个模拟对象,以便它仅将输入变量之一回显给调用者。
_resultThrottler = new Mock<IResultThrottler>();
_resultThrottler
.Setup(x => x.Throttle(It.IsAny<IEnumerable<ProductResult>>(), It.IsAny<Guid>()))
.Returns((IEnumerable<ProductResult> input, Guid resultSetId) => input );
然而当它被实际调用时输出总是空的。
var throttledResults = _resultThrottler.Throttle(results, resultSetId).ToList();
我可能做错了什么?
编辑:根据要求:
public interface IResultThrottler
{
IEnumerable<TType> Throttle<TType>(IEnumerable<TType> collectionToThrottle,
Guid sessionId) where TType : ProductResult;
}
变量 results
的完整初始化序列相当复杂,但在测试中它作为长度为 5 的 System.Collections.Generic<IEnumerable<(type that inherits from ProductResult)>>
类型的对象进入,并从模拟对象中出来长度为零。
Moq 似乎不喜欢我尝试使用继承类型而不是实际特定类型进行模拟。
我已移动代码以获取类型参数 -
public class ResultThrottlerStubBuilder<TType> where TType : ProductResult
{
private Mock<IResultThrottler> _resultThrottler;
public IResultThrottler Build()
{
_resultThrottler = new Mock<IResultThrottler>();
_resultThrottler
.Setup(x => x.Throttle(It.IsAny<IEnumerable<TType>>(), It.IsAny<Guid>()))
.Returns((IEnumerable<TType> input, Guid resultSetId) => input );
return _resultThrottler.Object;
}
}
并更改了测试代码以匹配,现在测试通过了。感谢评论者将我的想法推向正确的方向:-)