检查在单元测试中是否使用某个参数调用了一个函数
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")
我正在使用 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")