如何以最简方式使用uTest测试包含Arrays的任意代码?
如何以最简方式使用uTest测试包含Arrays的任意代码?
嘿,这个问题我刚好折腾过!uTest确实在utest.asserts.Asserts里给数组比较做了特殊处理,用==>就能直接比,但如果是在测试逻辑的其他地方(比如不是直接断言的代码里)要比较数组,或者想让整个测试里的数组比较更顺手,有几个简单办法:
直接用uTest的断言符号
==>
这是最省心的方式!如果你是在测试的断言环节验证数组,直接写assert(Array(1, 2, 3) ==> Array(1, 2, 3))就行。uTest会自动绕过数组的引用比较,转而做元素级的深度对比,完全不用自己写循环或者手动检查每个元素。显式调用
Asserts.eq方法
要是你在测试的业务逻辑里需要判断两个数组是否相等(比如做分支判断),可以直接用uTest底层的比较逻辑:utest.asserts.Asserts.eq(arr1, arr2)。这个方法返回布尔值,和==>用的是同一套比较规则,能帮你快速验证数组内容是否一致。比如:val actual = myTestFunction() val expected = Array("a", "b", "c") if (utest.asserts.Asserts.eq(actual, expected)) { // 执行后续测试逻辑 }给数组加个自定义扩展(可选)
要是觉得每次写eq太繁琐,你可以给数组扩展一个更直观的比较方法,让代码更自然:import utest.asserts.Asserts.eq implicit class ArrayEqualOps[T](private val arr: Array[T]) extends AnyVal { def ===(other: Array[T]): Boolean = eq(arr, other) }之后在测试里就能直接写
arr1 === arr2来判断数组相等,看起来和普通的相等判断一样清爽。
需要注意的是,uTest的数组比较是递归的深度比较,哪怕两个数组是不同的对象实例,只要元素的顺序、内容完全一致,就会被判定为相等,这刚好符合测试场景下的需求。
备注:内容来源于stack exchange,提问作者Marc Grue
相关产品推荐
相关产品推荐

