关于这个已经有很多问题被问到,但我认为我需要一些更基本的东西来澄清这个概念,因为我是 TDD 的初学者。到那时我无法前进。
能否请您通过以下测试方法并解释我是否理解错误:
[Test]
public void ShouldSearch()
{
var ColumnList = new List<Column>();
下一行表示我正在模拟对象。
但这是什么 It.IsAny<>()
意思是这里?
this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>()))
.Returns(ColumnList);
var result = this.getColouminfo.GetFinalRecords(this.context, this.gridColumn);
this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context),
It.Is<Column>(y => y.Id == 2)), Times.Once);
Assert.AreEqual(1, result.Data.Count, "Not equal");
Assert.IsTrue(result.Data.Success, "No success");
最佳答案
It.IsAny<T>
正在检查参数是否为 T 类型,它可以是 T 类型的任何实例。它基本上是在说,我不在乎你在这里传递什么,只要它是 T 类型即可。
this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>())).Returns(ColumnList);
以上是说每当 GetColumn
使用任何参数调用方法(只要它们分别是 Context
和 Column
的类型),返回 ColumnList
.
It.Is<T>
允许您检查传入的内容并确定传入的参数是否满足您的需求。
this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), It.Is<Column>(y => y.Id == 2)), Times.Once);
以上断言 GetColumn
使用 Context
调用了一次方法参数等于 this.Context
和一个 Column
Id属性为2的参数。
编辑:多年后以更多知识重温此答案。 this.ColumnServiceMock.Verify(x => x.GetColumn(It.Is<Context>(y => y == this.context), It.Is<Column>(y => y.Id == 2)), Times.Once);
可以缩短为this.ColumnServiceMock.Verify(x => x.GetColumn(this.context, It.Is<Column>(y => y.Id == 2)), Times.Once);
.您不需要使用 It.Is 检查引用相等性,您可以直接传递对象。
关于c# - it.isAny 和 it.is 在单元模拟测试中是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39413652/