0

我正在使用 BDDfy、AutoFixture 和 Moq 进行测试。

我想检查是否使用某个参数调用了一个函数。

该函数有许多参数。

更新 这是给定的步骤

 ICollection<string> result = new List<string>();
    _objectMock = new Mock<T>();
    _objectMock.SetupSequence(objectMock =>
     objectMock.Run(It.IsAny<DataModel1>(), It.IsAny<Collection<DataModel2>>())
     .Throws(_customException)
     .Returns(Task.FromResult(result));

在 [Then] 部分,我检查:

    mock.Verify(mock => mock.verifyData(It.IsAny<DataModel1>(), It.IsAny<IReadOnlyCollection<DataModel2>>()));

我想检查函数 verifyData 的第二个参数是否属于某个对象。

4

2 回答 2

1

您可以It.Is<T>用于此目的。例如,

It.Is<string>(c=>c == "Something")

在您在 OP 中给出的特定情况下,第二个参数可以给出为

mock.Verify(mock => mock.verifyData(It.IsAny<DataModel1>(), It.Is<IReadOnlyCollection<DataModel2>>(x=> x==expectedParam), It.IsIn<IReadOnlySet<DataModel3>>(), It.IsAny<IReadOnlyCollection<DataModel3>>()))
于 2019-12-23T21:21:50.533 回答
0

阿努维斯旺,你是对的。

它仍然不起作用的原因是因为参数是引用类型,我正在比较 2 个不同的引用。

我检查了对象内部的实际字符串并解决了它。

It.Is<string>(obj=>obj.prop == "Something")
于 2019-12-27T17:00:14.767 回答