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

C#新手处理枚举计算与类型转换时xUnit单元测试失败求解

问题排查结果

1 语法拼写错误

你定义的枚举名称为TeamActions,但测试代码中引用时误写为TeamAction,缺少末尾的s,修正为TeamActions.TeamWasScoredAgainst即可解决编译报错问题。

2 核心计算逻辑错误(测试断言失败的直接原因)

当teamAction取TeamWasScoredAgainst时,枚举值为-10,你当前的计算逻辑是:

return team.TeamScore - Convert.ToInt64((int)teamAction);

代入数值计算为:100 - (-10) = 110,和你预期的90完全相反,自然会触发断言失败。

3 可选代码规范问题

你抛出ArgumentNullException时传入的第一个参数是错误提示文本,不符合该异常的构造参数规范,第一个参数应该是触发空校验的参数名,建议修改为throw new ArgumentNullException(nameof(team), "Team is null");


修复方案

最简修复逻辑

直接修改计算方法,不需要单独判断正负,枚举值本身带符号,直接相加即可:

public static long CalcNewTeamScore(Team team, TeamActions teamAction)
{
    if (team == null) throw new ArgumentNullException(nameof(team), "Team is null");
    return team.TeamScore + (long)teamAction;
}

修复后测试用例的执行结果就是100 + (-10) = 90,和断言一致,测试可正常通过。

如果你要保留原有正负判断的写法,仅需修改负数值分支的计算逻辑即可:

if ((int)teamAction < 1)
{
    return team.TeamScore + Convert.ToInt64((int)teamAction);
}
else
{
    return team.TeamScore + Convert.ToInt64((int)teamAction);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:15:02