我有一个简单的单元测试,它测试验证函数是否会引发特定的验证问题。验证项返回一个带有Item&的简单对象。消息属性。我已经为这个函数编写了一个单元测试,但即使我知道函数按预期工作,这总是会失败。
<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 :(得分:2)
MSDN doc for CollectionAssert.Contains(collection,element,message)说:
验证指定的集合 包含指定的元素。该 如果元素不是,则断言失败 在该系列中找到。显示一个 如果断言失败,则显示消息。
假设CN.ValidateForManualInput在ActualItems中返回ValidationItems列表,让我暂时将这些项目称为“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#。)