.net 单元测试失败,测试代码正常!
我有一个简单的单元测试,它测试一个验证函数是否处理了一个特定的验证问题。验证项返回具有项和消息属性的简单对象。我已经为这个函数编写了一个单元测试,但是它总是失败,即使我知道这个函数按预期工作.net 单元测试失败,测试代码正常!,.net,vb.net,unit-testing,.net,Vb.net,Unit Testing,我有一个简单的单元测试,它测试一个验证函数是否处理了一个特定的验证问题。验证项返回具有项和消息属性的简单对象。我已经为这个函数编写了一个单元测试,但是它总是失败,即使我知道这个函数按预期工作 <TestMethod()> Public Sub ContractNote_ValidateForManualInputTest_TradeOrderValueComparison() 'Can't get this test to work even though validati
<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
公共分包合同注释\u ValidateForManualInputTest\u TradeOrderValueComparison()
'即使验证工作正常,也无法使此测试工作!
作为合同注释的尺寸CN=新合同注释
作为新贸易秩序的暗淡贸易
Trade.TradeValue=100
与CN
.CNTradeDate=日期。今天
.CNTradePrice=1
.CNTradeUnits=1
.CNTradeValue=1
.FundManagerReference=“zzz_zz”
.SkandiaCompanyOrderID=“xxx”
.ParentTradeOrder=Trade
以
Dim实现项作为System.Collections.Generic.List(Of ValidationItem)=CN.ValidateForManualInput
如果实现项计数>0,则
作为ValidationItem的Dim项目=新的ValidationItem(“值”,“必须与交易值匹配”)
CollectionAssert.Contains(实现项,项“”)
如果结束
Assert.AreNotEqual(0,实现项数)
端接头
我已经在ValidationItem上实现了IComparable(我有一个单独的单元测试来确认这一点)。我是否正确使用CollectionAssert?屏幕上显示:
验证指定的集合是否正确
包含指定的元素。这个
如果元素不存在,则断言失败
在收藏中找到。显示
如果断言失败,则返回消息
假设CN.ValidateForManualInput在实现项中返回一个ValidationItems列表,让我暂时将这些项称为“a”、“B”和“C”
接下来创建一个新的ValidationItem,用“Value”和“Must match trade Value”构建它。让我暂时把这个新的ValidationItem称为“D”
我认为您的问题可能是您对CollectionAssert.Contains()的调用实际上表明:
断言D在具有
其中只有3项,A、B和C
但事实并非如此,因此测试失败
如果不是CollectionSert.Contains(),而是循环实现项中的所有项,并使用以下内容检查每个项,该怎么办
Assert (ActualItems[ii].message is Not "Must match trade value")
(这可能不是准确的VB语法。我通常编写C#)。使用try-catch,看看是否有任何错误。CollectionAssert.Contains或Assert.AreNotEqual是否失败?谢谢,但只要集合中只有一个项,这种方法肯定有效?否则,您不认为所有项目都有匹配的消息吗?这不是有匹配消息的问题。它正在查找消息对象的特定实例。这样想:想象一下,我上面的答案中的A、B、C和D都是英镑。拿支笔在英镑纸币D上写一个X。语句“Contains(D)”不会问:“列表中是否有一张英镑纸币包含a、B和C?”而是问:“这个特定的英镑纸币(你在上面写X的那张)在列表中吗?”答案是否,因此Contains()返回false。更清楚?