Swe*_*tie 6 c# tdd unit-testing moq mocking
有很多问题已经在这方面提出过,但我认为我需要更基本的东西来清除这个概念,因为我是TDD的初学者.直到那时我才能前进.
你能不能通过以下测试方法来解释我是否有错误的理解:
[Test]
public void ShouldSearch()
{
var ColumnList = new List<Column>();
Run Code Online (Sandbox Code Playgroud)
下面的行意味着我在嘲笑对象.
但这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");
Run Code Online (Sandbox Code Playgroud)
Chr*_*isO 10
It.IsAny<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和ContextId属性等于2 的参数调用一次.
It.IsAny<T>() 指定该类型的多数民众赞成。
It.Is<T>() 更具体,需要一个lamda来确保它完全匹配。
两种方法都只是指定您不想在模拟时精确指定的参数的方法。因此,例如,如果参数是字符串名称,并且您不关心测试中的确切名称,则可以使用:
It.IsAny<string>() 在您的模拟规范中,它将匹配任何字符串。
如果您始终希望名称以“ S”开头,则可以
It.IsAny<string>(x => x.StartsWith("S")) 仅匹配以S开头的字符串。