Ballerina测试中assertExactEquals断言错误对象未按预期工作
Ballerina中assertExactEquals匹配错误对象失败的解决办法
你遇到的问题核心是:Ballerina的assertExactEquals是严格引用相等校验,哪怕两个错误的文本内容完全一致,它们也是独立创建的不同实例,引用地址不同,因此断言失败。
解决办法
有两种常用的处理方式:
- 改用
test:assertEquals做值相等校验:这个函数会对比错误的消息、类型等核心属性,而非引用地址 - 提取错误属性单独校验:如果需要更细粒度的验证,可以分别检查错误的消息、错误类型等字段
修改后的测试代码示例
@test:Config {} function testErrorFunction() { // 方案1:使用assertEquals做值比较 test:assertEquals(testError(), error("Error occurred")); // 方案2:细粒度校验错误属性 error? returnedErr = testError(); test:assertExists(returnedErr); test:assertEquals(returnedErr.message(), "Error occurred"); // 若有自定义错误类型,还可校验类型:test:assertEquals(returnedErr.type(), errorType); }
补充说明
每次调用error("Error occurred")都会生成一个全新的error对象,内存中的引用完全不同。assertExactEquals仅当两个变量指向同一个对象实例时才会通过,因此不适合用来比较内容相同但实例不同的错误。
内容的提问来源于stack exchange,提问作者LUHEERATHAN THEVAKUMAR
相关产品推荐
相关产品推荐

