test(coroutine): 为 WaitWhile 添加断言以验证谓词函数行为

- 修改测试逻辑以跟踪谓词函数的调用次数
- 添加对 IsDone 属性访问时谓词评估的验证
- 增加对条件变化时谓词重新评估的检查
- 添加相应的断言确保谓词按预期工作
This commit is contained in:
GeWuYou 2026-01-27 12:57:17 +08:00
parent bb95f738a8
commit 684d4601d0

View File

@ -221,13 +221,28 @@ public class YieldInstructionTests
[Test]
public void WaitWhile_Should_Use_Predicate_Function()
{
var continueWaiting = true;
var wait = new WaitWhile(() => continueWaiting);
var callCount = 0;
var shouldContinue = true;
var wait = new WaitWhile(() =>
{
callCount++;
return shouldContinue;
});
// 访问 IsDone会触发 predicate
Assert.That(wait.IsDone, Is.False);
Assert.That(callCount, Is.GreaterThan(0),
"Predicate should be evaluated when checking IsDone");
continueWaiting = false;
var previousCount = callCount;
shouldContinue = false;
// 再次访问 IsDone应再次调用 predicate并改变结果
Assert.That(wait.IsDone, Is.True);
Assert.That(callCount, Is.GreaterThan(previousCount),
"Predicate should be re-evaluated when condition changes");
}
/// <summary>
@ -387,12 +402,21 @@ public class YieldInstructionTests
[Test]
public void WaitWhile_Should_Evaluate_Condition_Immediately()
{
var callCount = 0;
var continueWaiting = true;
var wait = new WaitWhile(() => continueWaiting);
var wait = new WaitWhile(() =>
{
callCount++;
return continueWaiting;
});
// 初始检查,确保谓词被调用
Assert.That(wait.IsDone, Is.False);
Assert.That(callCount, Is.EqualTo(1), "Predicate should be called once initially");
// 改变条件并验证谓词再次被调用
continueWaiting = false;
Assert.That(wait.IsDone, Is.True);
Assert.That(callCount, Is.EqualTo(2), "Predicate should be called again after condition change");
}
}