Simulación de eventos de devolución de llamada de terceros mediante moq

Hemos estado tratando de escribir pruebas unitarias para una clase de trabajador escrita en C #, que simula una API de terceros (basada en COM) usando moq para crear dinámicamente los objetos simulados. NUnit es nuestro marco de pruebas de unidad.

Este componente de terceros implementa un par de interfaces, pero también necesita volver a llamar a nuestra clase de trabajadores utilizando eventos. Nuestro plan era simular los eventos que este componente de terceros puede generar y probar que nuestra clase de trabajadores funcionó como se esperaba.

Desafortunadamente, nos hemos topado con un problema, ya que parece que moq no puede burlarse y provocar eventos que se definen externamente. Desafortunadamente, no puedo proporcionar el código para la API de terceros exacta que estamos usando, pero hemos recreado el problema utilizando la API de MS Word y también mostramos cómo funcionan las pruebas cuando se usa una interfaz definida localmente:

using Microsoft.Office.Interop.Word;
using Moq;
using NUnit.Framework;
using SeparateNamespace;

namespace SeparateNamespace
{
    public interface LocalInterface_Event
    {
        event ApplicationEvents4_WindowActivateEventHandler WindowActivate;
    }
}

namespace TestInteropInterfaces
{
    [TestFixture]
    public class Test
    {
        [Test]
        public void InteropExample()
        {
            // from interop
            Mock<ApplicationEvents4_Event> mockApp = new Mock<ApplicationEvents4_Event>();

            // identical code from here on...
            bool isDelegateCalled = false;

            mockApp.Object.WindowActivate += delegate { isDelegateCalled = true; };

            mockApp.Raise(x => x.WindowActivate += null, null, null);

            Assert.True(isDelegateCalled);
        }

        [Test]
        public void LocalExample()
        {
            // from local interface
            Mock<LocalInterface_Event> mockApp = new Mock<LocalInterface_Event>();

            // identical code from here on...
            bool isDelegateCalled = false;

            mockApp.Object.WindowActivate += delegate { isDelegateCalled = true; };

            mockApp.Raise(x => x.WindowActivate += null, null, null);

            Assert.True(isDelegateCalled);
        }
    }
}

¿Alguien podría explicar por qué funciona el hecho de generar eventos para la interfaz definida localmente, pero no el importado desde la API de terceros (en este caso, Word)?

Tengo la sensación de que esto tiene que ver con el hecho de que estamos hablando con un objeto COM (a través del ensamblaje de interoperabilidad) pero no estoy seguro de cómo solucionar el problema.