Testing 具有列表参数的Moq方法

Testing 具有列表参数的Moq方法,testing,tdd,moq,Testing,Tdd,Moq,嗨,我有以下测试 <TestInitialize()> Public Sub Initialise() dbHelper = New Mock(Of IDbHelper) dt = New DataTable() dt.Columns.AddRange(New DataColumn() {New DataColumn("AreaId"), New DataColumn(

嗨,我有以下测试

    <TestInitialize()>
Public Sub Initialise()
    dbHelper = New Mock(Of IDbHelper)
    dt = New DataTable()
    dt.Columns.AddRange(New DataColumn() {New DataColumn("AreaId"),
                                          New DataColumn("Area"),
                                          New DataColumn("CountryId"),
                                          New DataColumn("Country"),
                                          New DataColumn("SubRegionId"),
                                          New DataColumn("SubRegion"),
                                          New DataColumn("RegionId"),
                                          New DataColumn("Region"),
                                          New DataColumn("Notes"),
                                          New DataColumn("Enabled"),
                                          New DataColumn("FlagIgnoreFactsheet")
                                          })
    dt.Rows.Add(New String() {"0", "", "0", "", "0", "", "0", "", "", "True", "False"})

    Dim paramList As New List(Of SqlParameter)
    paramList.Add(New SqlParameter("@AreaId", It.IsAny(Of Int64)))
    paramList.Add(New SqlParameter("@AreaName", String.Empty))
    paramList.Add(New SqlParameter("@CountryId", 0))
    paramList.Add(New SqlParameter("@Enabled", 1))
    paramList.Add(New SqlParameter("@ShowAll", 0))

    dbHelper.Setup(Function(db) db.ExecuteReader(It.IsAny(Of String), paramList)).Returns(dt)

End Sub

 <TestMethod()>
Public Sub GetAreaWithParamTest()

    Dim areaRepository As AreaRepository = New AreaRepository(dbHelper.Object)

    Dim result = areaRepository.GetArea(1)

    Assert.IsNotNull(result)
End Sub
请帮忙

使用dbHelper.SetupFunctiondb.ExecuteReaderIt.IsAnyOf字符串paramList.Returnsdt设置ExecuteReader方法时,它希望paramList将作为参数传递。但是实际上你传递了另一个物体,但是,具有相同的结构

最小起订量通过参考来比较清单。你也可以用表情来面对同样的问题。我已经回答了这个问题

我建议您使用It.IsAnyOf ListOf SqlParameter设置ExecuteReader方法,然后使用来验证参数列表

使用GitHub的示例中有:

mock.Setup(foo => foo.Execute(It.IsAny<int>(), It.IsAny<string>()))
    .Returns(true)
    .Callback<int, string>((i, s) => 
        {
            /* your asserts can be placed here */
        });

非常感谢你。我是一个完全的Moq初学者,你能推荐一些能让我提高速度的教程/书吗?我想这是第一次。它涵盖了许多用例。
mock.Setup(foo => foo.Execute(It.IsAny<int>(), It.IsAny<string>()))
    .Returns(true)
    .Callback<int, string>((i, s) => 
        {
            /* your asserts can be placed here */
        });