检查在单元测试中是否使用某个参数调用了一个函数

check that a function had been called with a certain parameter in unit testing

我正在使用 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 的第二个参数是否属于某个对象。

您可以使用 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>>()))

Anu Viswan,你是对的。

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

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

It.Is<string>(obj=>obj.prop == "Something")