在VB.NET单元测试中如何简化List集合的Assert断言写法?
VB.NET单元测试简化集合断言实现方案
可以实现,你设想的两行断言校验所有ID和Name的逻辑是可行的,以下是具体实现方式:
前置要求
先在测试类文件顶部导入LINQ命名空间:
Imports System.Linq
简化后的断言写法
直接通过LINQ投影提取集合中所有元素的对应属性,再用CollectionAssert批量比对即可:
' 按顺序校验所有元素的ID CollectionAssert.AreEqual({"1", "2"}, result.Select(Function(item) item.ID).ToArray()) ' 按顺序校验所有元素的Name CollectionAssert.AreEqual({"One", "Two"}, result.Select(Function(item) item.Name).ToArray())
语法说明
- VB.NET中LINQ投影用
Function(迭代变量) 取值表达式的Lambda写法,功能等价于其他语言的箭头函数 Select()返回的是IEnumerable(Of T)类型,需要调用ToArray()转成数组,才能和数组常量匹配CollectionAssert的入参要求CollectionAssert.AreEqual会按顺序逐个比对两个集合的元素,和你原有逐行按索引校验的逻辑完全等价
完整修改后的测试方法示例
<TestMethod()> Public Sub Method_Scenario_ReturnsList() 'Arrange Dim sut As New ClassName() 'Act Dim result = sut.ListMethod(parameter) 'Assert ' 可选校验:先确认返回集合不为空,避免后续调用Select触发空引用异常 Assert.IsNotNull(result) CollectionAssert.AreEqual({"1", "2"}, result.Select(Function(item) item.ID).ToArray()) CollectionAssert.AreEqual({"One", "Two"}, result.Select(Function(item) item.Name).ToArray()) End Sub
额外提示
如果不需要校验元素顺序,仅需要确认所有ID/Name都存在且数量匹配,可以改用CollectionAssert.AreEquivalent,该方法会忽略元素顺序进行比对。
内容的提问来源于stack exchange,提问作者that_noob
相关产品推荐
相关产品推荐

