You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ballerina中断言错误值?自定义错误类型测试实现

自定义错误类型的断言测试实现(Ballerin)

针对你定义的Error和ErrorDetails类型,可以借助Ballerin的测试框架编写断言逻辑,核心是使用test:assertError()函数匹配错误的类型与细节。

步骤与示例代码

首先修正你定义中severity的拼写错误(MEDUIM应为MEDIUM),确保类型合法:

type ErrorDetails record {|
    string message;
    string reason;
    "HIGH"|"MEDIUM"|"LOW" severity;
    int code;
    record {} other?;
|};

type Error error<ErrorDetails>;

1. 编写抛出错误的示例函数

先定义一个会抛出目标错误的函数,用于测试触发:

function throwCustomError() returns error? {
    ErrorDetails errDetails = {
        message: "请求参数无效",
        reason: "缺少必填字段user_id",
        severity: "MEDIUM",
        code: 400,
        other: {field: "extra debug info"}
    };
    return error(errDetails);
}

2. 编写测试函数

导入测试模块后,编写测试用例完成断言:

import ballerinax.test;

@test:Config
function testCustomErrorAssertion() {
    // 完全匹配错误细节的断言
    test:assertError(
        throwCustomError(),
        test:ErrorAssertionConfig {
            errorType: Error,
            details: {
                message: "请求参数无效",
                reason: "缺少必填字段user_id",
                severity: "MEDIUM",
                code: 400,
                other: {field: "extra debug info"}
            }
        }
    );

    // 部分字段匹配的断言(仅校验核心字段)
    test:assertError(
        throwCustomError(),
        test:ErrorAssertionConfig {
            errorType: Error,
            details: test:partialEquals({
                severity: "MEDIUM",
                code: 400
            })
        }
    );
}

关键说明

  • test:assertError()会捕获目标函数抛出的错误,同时校验错误类型与细节是否匹配。
  • 使用test:partialEquals()可以只断言你关心的核心字段,忽略非必要字段(比如可选的other)。
  • 若other字段有特定内容,也可在断言的details中加入对应结构完成匹配。

内容的提问来源于stack exchange,提问作者Lakshan Weerasinghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 02:20:23