这是什么?是吗?是什么?正在进行单元模拟测试
本文关键字:是什么 模拟 单元 测试 是吗 正在进行 | 更新日期: 2023-09-27 18:06:18
关于这个问题已经有很多问题了,但我认为我需要一些更基本的东西来澄清这个概念,因为我是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.IsAny<T>()
指定该类型的任何内容。
It.Is<T>()
更具体,需要一个lambda来确保它完全匹配。
都是指定参数的方法,而您在mock时不希望精确指定该参数。例如,如果参数是字符串名称而你不关心测试中的确切名称你可以使用:
模拟规范中的 It.IsAny<string>()
,它将匹配任何字符串。
如果您总是希望名称以"S"然后你可以输入
It.Is<string>(x => x.StartsWith("S"))
只匹配以s开头的字符串