是否可以在组装Returns对象时访问用于调用模拟期望的参数?
这是所涉及对象的存根,鉴于此,我试图模拟一个集合:
Class CollectionValue {
public Id { get; set; }
}
Class Collection {
private List<CollectionValue> AllValues { get; set; }
public List<CollectionValue> GetById(List<int> ids) {
return AllValues.Where(v => ids.Contains(v.Id));
}
}
Run Code Online (Sandbox Code Playgroud)
给定将用于模拟对象的CollectionValues测试列表,如何设置期望来处理CollectionValues列表中ID的每个可能排列,包括组合现有ID和不存在ID的调用?我的问题来自于希望在一次通话中建立所有可能的期望; 如果无法访问原始参数,我可以轻松地设置每次我想在给定调用中测试的确切期望.
这是我希望做的,"???" 表示访问用于调用GetById的参数(符合It.IsAny限制的参数)的方便位置:
CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???);
Run Code Online (Sandbox Code Playgroud) 我对如何使用Moq-Setup-Return构造的问题感到困惑.
首先我的设置:
某些类型为IRepository-Interface的存储库必须实现StoreAsync-Method,该方法返回StoreResult对象,并将存储的实体作为属性包含在内.
using System.Threading.Tasks;
using Moq;
using Xunit;
namespace Tests
{
public class Entity { }
public class StoreResult
{
public Entity Entity { get; set; }
}
public interface IRepository
{
Task<StoreResult> StoreAsync(Entity entity);
}
public class Tests
{
[Fact]
public void Test()
{
var moq = new Mock<IRepository>();
moq.Setup(m => m.StoreAsync(It.IsAny<Entity>())).Returns(e => Task.FromResult<Task<StoreResult>>(new StoreResult {Entity = e}));
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试为IRepository-Interface编写一个Mock-Objekt,但我不知道如何编写Return-Statement,以便StoreResult-Object包含作为StoreAsync-Function参数给出的实体.
我在Moq ReturnsAsync()中读到了有关参数和MOQ的这个主题:返回传递给方法的值.
我试过了
moq.Setup(m …Run Code Online (Sandbox Code Playgroud)