给定以下类(class):
public class TestAttribute : ActionFilterAttribute
{
public bool SomeExampleBool = false;
public override void OnActionExecuting(HttpActionContext actionContext)
{
Task.Factory.StartNew(() => { SomeExampleBool = true; });
}
}
如何为 OnActionExecuting
编写一个有效的单元测试来断言 SomeExampleBool
等于 true
?
当编写单元测试并调用OnActionExecuting
,然后调用Assert时,逻辑将在尚未执行的线程上执行。所以断言失败。您会尝试类似 Thread.Sleep 的方法几秒钟吗?看起来像黑客。我确信有一种我没有想到的更好的方法,但我正在向社区寻求帮助。
最佳答案
您需要将 StartNew
返回的 Task
公开给您希望能够执行的任何人:
- 了解操作何时完成(通过向其添加延续)
- 了解结果(如果适用)
- 了解任何异常(exception)情况(如果适用)
- 了解是否已取消
- 等待完成
由于您没有向任何人公开返回Task
,因此您只是将其扔在地板上,其他任何人都无法等待它,或者在完成后运行延续。通常,您会从该方法返回Task
。如果不能,因为它是一个事件处理程序,那么您可能会将 Task
存储在调用者能够访问的字段或某种其他形式的状态中。
关于c# - 使用代码调用任务进行单元测试同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30899546/