代码之家  ›  专栏  ›  技术社区  ›  Simon

单元测试失败,测试代码正常!

  •  2
  • Simon  · 技术社区  · 17 年前

    我有一个简单的单元测试,它测试一个验证函数是否处理了一个特定的验证问题。验证项返回一个包含项&的简单对象;消息属性。我已经为这个函数编写了一个单元测试,但是它总是失败,即使我知道这个函数按预期工作。

    <TestMethod()> Public Sub ContractNote_ValidateForManualInputTest_TradeOrderValueComparison()
    
        'Can't get this test to work even though validation works!
        Dim CN As ContractNote = New ContractNote
        Dim Trade As New TradeOrder
    
        Trade.TradeValue = 100
    
        With CN
            .CNTradeDate = Date.Today
            .CNTradePrice = 1
            .CNTradeUnits = 1
            .CNTradeValue = 1
            .FundManagerReference = "_zzz_"
            .SkandiaCompanyOrderID = "xxx"
            .ParentTradeOrder = Trade
        End With
    
        Dim ActualItems As System.Collections.Generic.List(Of ValidationItem) =       CN.ValidateForManualInput  
    
        If actualitems.Count > 0 Then             
            Dim item As ValidationItem = New ValidationItem("Value", "Must match trade value")
            CollectionAssert.Contains(ActualItems, item, "")
        End If
    
        Assert.AreNotEqual(0, ActualItems.Count)
    
    End Sub
    

    我已经在ValidationItem上实现了IComparable(我有一个单独的单元测试来确认这一点)。我是否正确使用CollectionAssert?

    1 回复  |  直到 17 年前
        1
  •  2
  •   JeffH    17 年前

    这个 MSDN doc for CollectionAssert.Contains(collection,element,message) 说:

    包含指定的元素。这个 如果元素不存在,则断言失败 在收藏中找到。显示 如果断言失败,则返回消息。

    假设CN.ValidateForManualInput在实现项中返回一个ValidationItems列表,让我暂时将这些项称为“a”、“B”和“C”。

    接下来创建一个新的ValidationItem,用“Value”和“Must match trade Value”构建它。让我暂时把这个新的ValidationItem称为“D”。

    断言D在具有

    但事实并非如此,因此测试失败。

    如果不是CollectionSert.Contains(),而是循环实现项中的所有项,并使用以下内容检查每个项,该怎么办

    Assert (ActualItems[ii].message is Not "Must match trade value")
    

    (这可能不是完全的VB语法。我通常写C。)

    推荐文章