gpt4 book ai didi

c# - 带有代码调用任务的单元测试同步方法

转载 作者:行者123 更新时间:2023-11-30 20:43:01 24 4
gpt4 key购买 nike

给定以下类:

public class TestAttribute : ActionFilterAttribute
{
public bool SomeExampleBool = false;

public override void OnActionExecuting(HttpActionContext actionContext)
{
Task.Factory.StartNew(() => { SomeExampleBool = true; });
}
}

您将如何为断言 SomeExampleBool 等于 trueOnActionExecuting 编写有效的单元测试?

当编写单元测试并调用 OnActionExecuting,然后调用 Assert 时,逻辑将在尚未执行的线程上执行。所以断言失败了。你会尝试像 Thread.Sleep 这样的东西几秒钟吗?看起来像一个黑客。我确信有一种我没有想到的更好的方法,但我正在向社区寻求帮助。

最佳答案

您需要将 StartNew 返回的 Task 公开给任何您希望能够这样做的人:

  1. 知道操作何时完成(通过向其添加延续)
  2. 如果适用,知道结果是什么
  3. 知道有哪些异常(exception)情况(如果适用)
  4. 知道它是否被取消
  5. 等到它完成

由于您没有将返回的 Task 暴露给任何人,您只是将它丢在地板上,其他任何人都无法等待它,也无法在它完成后继续运行.通常,您将从该方法返回 Task。如果你不能,因为它是一个事件处理程序,那么你可能会将 Task 存储在一个字段或调用者能够访问的某种其他形式的状态中。

关于c# - 带有代码调用任务的单元测试同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com