Events 断言模拟(MOQ)事件没有附加处理程序

Events 断言模拟(MOQ)事件没有附加处理程序,events,moq,Events,Moq,这是非常直截了当的(ish),因为事件是“真实的”,就像现在由DynamicProxy创建的一样,但我无法为模拟事件计算出任何结果 解释我试图实现的最好方法是使用代码,请参见测试方法中的注释行: using System; using Moq; using NUnit.Framework; namespace MOQTest { [TestFixture] public class EventsMoqTest { [Test] public v

这是非常直截了当的(ish),因为事件是“真实的”,就像现在由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;
        }
    }   
}
使用系统;
使用最小起订量;
使用NUnit.Framework;
名称空间MOQTest
{
[测试夹具]
公共类事件测试
{
[测试]
公开测试()
{
var hasEventMock=new Mock();
使用(var observer=newobserver(hasEventMock.Object))
{
//断言hasEventMock.Object已附加处理程序
}
//断言hasEventMock.Object没有附加处理程序
}
}
公共接口IHasEvent
{
事件处理程序事件;
}
公共类观察者:IDisposable
{
私有只读IHasEvent\u hasEvent;
私有只读事件处理程序\u hasEventOnAnEvent;
公共观察员(IHasEvent hasEvent)
{
_hasEvent=hasEvent;
_hasEventOnAnEvent=\u hasEvent\u AnEvent;
_hasEvent.AnEvent+=\u hasEventOnAnEvent;
}
void\u hasEvent\u AnEvent(对象发送方,事件参数e)
{}
公共空间处置()
{
_haseevent.AnEvent-=\u hasEventOnAnEvent;
}
}   
}

不幸的是,你不能。这不是一个真正的moq问题,但是C#event关键字处理委托的方式。有关更多信息,请参阅