我阅读了文档,您可以使用Configure()来在每次调用方法时返回不同的值。但是,我正在使用NSubstitute 4.2.1,并且无法访问API上的“ Configure()”。我想知道是否有任何变通办法来返回不同的值。
到目前为止,我已经尝试过以下操作:
var output = new List<List<MobileGetDocumentAuthorizationDto>>();
var counter = 0;
apiLayer.GetByIds(idStack).ReturnsForAnyArgs(x =>
{return output[counter++];
});
我将新值添加到循环中。
每次调用apiLayer.GetByIds()时,我想返回不同的列表。
感谢您在此方面的专业知识。
答案 0 :(得分:1)
这可以通过许多不同的方式完成,但是下面是使用以下类型的简单示例
public interface IService {
List<MyDto> GetByIds(int[] ids);
}
public class MyDto {
public int Id { get; set; }
}
样本测试显示了如何使用Returns
函数生成随机结果。
[TestClass]
public class NSubTests {
[TestMethod]
public void Should_Return_Multiple_ListValues() {
//Arrange
IService apiLayer = NSubstitute.Substitute.For<IService>();
Random randomIds = new Random(9999);
Random randomCount = new Random();
apiLayer.GetByIds(Arg.Any<int[]>()).Returns(args => {
var ids = args.ArgAt<int[]>(0);
var count = randomCount.Next(ids.Length);
var items = Enumerable.Range(0, count)
.Select(_ => new MyDto { Id = randomIds.Next() })
.ToList();
return items;
});
//Act
var list1 = apiLayer.GetByIds(new[] { 1, 2, 3, 4, 5 });
var list2 = apiLayer.GetByIds(new[] { 1, 2, 3, 4, 5 });
//Assert - FluentAssertions
list1.Should().NotBeSameAs(list2);
}
}
每次调用模拟成员时,它将返回一个不同的列表,该列表基于作为输入传递的id的数量生成。