0

これは非常に簡単です。イベントはDynamicProxyによって作成されたように「本物」ですが、モックされたイベントについては何も解決できません。

私が達成しようとしていることを説明する最良の方法は、コードを使用することです。テストメソッドのコメント行を参照してください。

using System;
using Moq;
using NUnit.Framework;

namespace MOQTest
{
 [TestFixture]
    public class EventsMoqTest
    {
        [Test]
        public void DetachTest()
        {
            var hasEventMock = new Mock<IHasEvent>();

            using (var observer = new Observer(hasEventMock.Object))
            {
                 //Assert that hasEventMock.Object has handler attached
            }

            //Assert that hasEventMock.Object DOES NOT have handler attached
        }
    }

    public interface IHasEvent
    {
        event EventHandler AnEvent;
    }

    public class Observer : IDisposable
    {
        private readonly IHasEvent _hasEvent;
        private readonly EventHandler _hasEventOnAnEvent;

        public Observer(IHasEvent hasEvent)
        {
            _hasEvent = hasEvent;

            _hasEventOnAnEvent = _hasEvent_AnEvent;
            _hasEvent.AnEvent += _hasEventOnAnEvent;
        }

        void _hasEvent_AnEvent(object sender, EventArgs e)
        {}

        public void Dispose()
        {
            _hasEvent.AnEvent -= _hasEventOnAnEvent;
        }
    }   
}
4

1 に答える 1

1

残念ながら、できません。これは実際にはmoqの問題ではありませんが、C#イベントキーワードがデリゲートで機能する方法です。詳細については、このSOの回答を参照してください。

于 2012-09-13T16:54:22.213 に答える