我在接口上定义了一个仅获取索引器
public interface ISomeInterface
{
string this[string key] { get; }
}
在带有 Moq 的单元测试中,any 字符串参数作为索引器键是有效的:
Mock<ISomeInterface> mock = new();
mock
.Setup(m => m[It.IsAny<string>()]) // <-- valid
.Returns("anything for all string key");
不幸的是,在 NSubstitute 中,类似的似乎是不可能的:
ISomeInterface mock = Subtitute.For<ISomeInterface>();
mock[Arg.Any<string>()] // <-- invalid
.Returns("anything for all string key");
我知道可以为特定键设置模拟索引器,如下线程所示:
如何在 NSubstitute 中使用私有 setter 来模拟对象的索引器?
如何为 NSubtitute 中的 Any 键输入参数设置模拟索引器返回值?
使用
mock[Arg.Any<string>()]
按预期工作:
[Test]
public void IndexerSubTest()
{
ISomeInterface mock = Substitute.For<ISomeInterface>();
mock[Arg.Any<string>()]
.Returns("anything for all string key");
Assert.That(mock["qq"], Is.EqualTo("anything for all string key"));
}