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
相关产品推荐
相关产品推荐

