它是什么。它是什么,它是什么。它在单元模拟测试中

时间:2016-09-09 14:14:36

标签: c# unit-testing mocking tdd moq

有很多问题已经在这方面提出过,但我认为我需要更基本的东西来清除这个概念,因为我是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");

2 个答案:

答案 0 :(得分:6)

annotations: { textStyle: { color: 'black', fontSize: 11, }, alwaysOutside: true } 正在检查参数是否为T类型,它可以是T类型的任何实例。它基本上是说,我不在乎你传递的是什么,只要它是T的类型。

It.IsAny<T>

以上说明只要使用任何参数调用this.ColumnServiceMock.Setup(x => x.GetColumn(It.IsAny<Context>(), It.IsAny<Column>())).Returns(ColumnList);方法(只要它们分别是GetColumnContext的类型),就返回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参数等于Contextthis.Context参数,其Id属性等于2。

答案 1 :(得分:4)

It.IsAny<T>()指定该类型的任何内容。

It.Is<T>()更具体,需要一个lamda来确保它与之完全匹配。

两者都只是指定一个你不想在模拟时准确指定的参数的方法。因此,例如,如果参数是字符串名称,并且您不关心测试中的确切名称,则可以使用:

模拟规范中的

It.IsAny<string>(),它将匹配任何字符串。

如果您始终希望名称以“S”开头,那么您可以

It.IsAny<string>(x => x.StartsWith("S"))只匹配以S开头的字符串。