我正在寻找一种在 Action 方法上测试 BeginInvoke 的方法,因为该方法在后台线程上运行,因此无法知道它何时实际完成或调用回调方法。我正在寻找一种方法让我的测试等到回调被调用后再进行断言。
在下面的 Presenter 类中,您可以注意到我在后台线程上调用 PopulateView,它会在获取数据时更新视图,并且我正在尝试断言视图属性已正确初始化。
我正在使用 NUnit 和起订量。
public class Presenter
{
private IView _view;
private IService _service;
public Presenter(IView view, IService service)
{
_view = view;
_service = service;
Action action = PopulateView;
action.BeginInvoke(PopulateViewCallback, action);
}
private void PopulateViewCallback(IAsyncResult ar)
{
try
{
Action target = (Action)ar.AsyncState;
target.EndInvoke(ar);
}
catch (Exception ex)
{
Logger.Instance.LogException("Failed to initialize view", ex);
}
}
private void PopulateView()
{
Thread.Sleep(2000); // Fetch data _service.DoSomeThing()
_view.Property1 = "xyz";
}
}