21

在组装 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));
    }
}

给定一个将用于模拟对象的 CollectionValues 测试列表,如何设置一个期望来处理该 CollectionValues 列表中所有可能的 ID 排列,包括组合现有 ID 和不存在 ID 的调用? 我的问题来自于希望在一次通话中设置所有可能的期望;如果无法访问原始参数,我可以很容易地设置我想要在每次给定调用中测试的确切期望。

这就是我希望做的,在哪里“???” 表示可以方便地访问用于调用 GetById 的参数(限定 It.IsAny 限制的参数):

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???);
4

1 回答 1

61

从起订量快速入门指南:

// access invocation arguments when returning a value
mock.Setup(x => x.Execute(It.IsAny<string>()))
                .Returns((string s) => s.ToLower());

因此,这表明您可以填写您的 ??? 作为

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>()))
              .Returns((List<int> l) => //Do some stuff with l
                      );
于 2009-06-02T19:49:15.923 回答