【问题标题】:check that a function had been called with a certain parameter in unit testing检查是否在单元测试中使用某个参数调用了函数
【发布时间】:2019-12-23 20:51:05
【问题描述】:

我正在使用 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代替It.IsAny

标签: c# moq autofixture teststack


【解决方案1】:

您可以为此目的使用It.Is&lt;T&gt;。例如,

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>>()))

【讨论】:

    【解决方案2】:

    阿努维斯万,你是对的。

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多