AutoFixture.Freeze 模拟的 IEnumerable

AutoFixture.Freeze IEnumarable of Mocks

我很乐意使用 AutoFixture.Freeze<Mock<IViolationChecker>>() 设置 class 以使用 .Verify().Setup()

进行测试

但是,在我正在处理的 class 中需要一个可枚举的 IViolationChecker

private readonly IEnumerable<IViolationChecker> _violationCheckers;

如何使用 AutoFixture.Freeze 定义我的 IViolationChecker 列表?我用过

var violationCheckers = AutoFixture.Freeze<Mock<IEnumerable<IViolationChecker>>>();

但我不确定 .Verify().Setup() 应该怎么写。

一个选项是冻结集合并为每个项目使用 Mock.Get 以获得用于设置和验证的模拟。

//Arrange
var violationCheckers = AutoFixture.Freeze<IEnumerable<IViolationChecker>>();
var mocks = violationCheckers.Select(item => Mock.Get(item));
foreach (var mock in mocks) {
    mock.Setup(_ => _.SomethingHere()).Verifiable(); //setup mock as desired.
}

//...

//Act
//...exercise member under test

//Assert
foreach(var mock in mocks) {
    mock.Verify(_ => /* some predicate*/, Times.Once);
    //OR
    //mock.Verify();
}

//...