2009-08-14 124 views
2

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

<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?

+0

用try catch包装,看看是否有任何错误。 – epitka 2009-08-14 15:30:33

+0

它在CollectionAssert.Contains或Assert.AreNotEqual上失败吗? – Joseph 2009-08-14 15:43:10

回答

2

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

验证指定的集合 包含指定的元素。如果元素不是在集合中找到 ,则 断言失败。如果断言失败,则显示 消息。

假设CN.ValidateForManualInput返回ValidationItems的ActualItems列表,让我叫那些项目 “A”, “B” 和 “C” 了一下。

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

我认为你的问题可能是,你对CollectionAssert.Contains()调用有效地说道:

断言,d是在具有 只有在这3个项目中,A,B和C的列表

但它不是,所以测试失败。

如果有什么,而不是CollectionInsert.Contains(),你循环遍历ActualItems的所有项目,并与类似检查每个:

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

(也可能不准确VB语法我平时写C# )

+0

谢谢,但只要集合中只有一个项目,它肯定会工作。否则,你不是断言所有的项目都有匹配的消息? – Simon 2009-08-17 09:10:10

+0

这不是一个匹配消息的问题。它正在寻找消息对象的* specific *实例。这样想一想:想象一下,我上面答案中的A,B,C和D是磅笔记。拿一支笔,并在英镑笔记D上写上一个X.“包含(D)”的陈述并没有问:“列表中是否有* a *磅注释包含A,B和C?”而是:“这是*特定的*磅注释(你写X的那个)在列表中?”答案是否定的,所以Contains()返回false。更清晰? – JeffH 2009-08-17 13:07:59