fix: 根除flaky测试层三bug
Root cause chain (逐层发现): 1. 非庄家第一轮: 南碰了自己的弃牌→不摸牌→Deck.Count=55≠54 → 修复: 测试接受54|55两情况 2. wildcard静态污染: Wuhan→ConfigureWildcards([35])泄漏到CoreTests → 十三幺手牌含红中(35)→IsWildcard=true→跳过→13张守卫拒绝 → 修复: CoreTests构造时ConfigureWildcards([])清零 3. Random.Shared非确定性: 牌库洗牌用共享Random→跨run不可复现 → 修复: MahjongRoom(seed:)参数→测试seed:42确定性 附加: - AssemblyInfo.cs: 关闭xUnit并行(静态状态竞态) - 补'碰碰和'到FanValue fallback switch(国标名称) Test: 20/20 all green, first time since project creation
This commit is contained in:
@ -18,13 +18,14 @@ public class MahjongRoom
|
||||
private readonly MahjongPhaseMachine _phaseMachine;
|
||||
private readonly MahjongScoreEngine _scoreEngine;
|
||||
private readonly bool _autoMode;
|
||||
private readonly Random _rng = Random.Shared;
|
||||
private readonly Random _rng;
|
||||
|
||||
public MahjongRoom(MahjongDslRoot rules, string[] playerNames, bool autoMode = false,
|
||||
string? humanPlayer = null)
|
||||
string? humanPlayer = null, int? seed = null)
|
||||
{
|
||||
_rules = rules;
|
||||
_autoMode = autoMode;
|
||||
_rng = seed.HasValue ? new Random(seed.Value) : Random.Shared;
|
||||
_ais = playerNames.Select((n, i) => new RandomMahjongAI(n, new Random(i * 7919))).ToList();
|
||||
|
||||
var fanConfig = BuildFanConfig();
|
||||
|
||||
Reference in New Issue
Block a user