Cómo probar la unidad BeginInvoke en una acción

Estoy buscando una manera de probar BeginInvoke en un método Action, ya que el método se ejecuta en un subproceso en segundo plano, no hay forma de saber cuándo se completa o llama al método de devolución de llamada. Estoy buscando una manera de mantener mi prueba esperando hasta que se llame la devolución de llamada antes de hacer afirmaciones.

En la siguiente clase de Presentador, puede notar que estoy invocando PopulateView en el subproceso de fondo que actualiza la vista cuando se obtienen los datos y estoy tratando de afirmar que las Propiedades de la vista se inicializan correctamente.

Estoy usando NUnit y Moq.

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";
     }  
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta