JustMock单位测试在应该失败时通过



我正在使用JustMock编写一些单位测试,并且对自己感到非常满意,他们都经过,直到我试图让一个人失败。该单元测试通过:

[TestFixture]
public class TestEventAggregation
{
    class BaseEventArgs : EventArgs {}
    class DerivedEventArgs : BaseEventArgs {}
    class EventAggregationService
    {
        private Subject<object> _subject = new Subject<object>();
        public IDisposable Subscribe<TEventArgs>(EventHandler<TEventArgs> eventHandler)
            where TEventArgs : EventArgs
        {
            return _subject.OfType<EventPattern<TEventArgs>>().Subscribe(
                delegate(EventPattern<TEventArgs> pattern)
                {
                    eventHandler(pattern.Sender, pattern.EventArgs);
                }
            );
        }
        public void Publish<TEventArgs>(object sender, TEventArgs eventArgs)
            where TEventArgs : EventArgs
        {
            _subject.OnNext(new EventPattern<TEventArgs>(sender, eventArgs));
        }
    }
    [Test]
    public void BaseEventIsPublishedToBaseEventSubcriberButNotDerivedEventSubscriber()
    {
        EventAggregationService eventAggregationService = new EventAggregationService();
        // Arrange
        Action<object, BaseEventArgs> baseEventHandler = Mock.Create<Action<object, BaseEventArgs>>();
        Mock.Arrange(() => baseEventHandler(Arg.AnyObject, Arg.IsAny<BaseEventArgs>())).OccursOnce();
        Action<object, DerivedEventArgs> derivedEventHandler = Mock.Create<Action<object, DerivedEventArgs>>();
        Mock.Arrange(() => derivedEventHandler(Arg.AnyObject, Arg.IsAny<DerivedEventArgs>())).OccursOnce();
        // Act
        using (eventAggregationService.Subscribe(new EventHandler<BaseEventArgs>((s, e) => baseEventHandler(s, e))))
        using (eventAggregationService.Subscribe(new EventHandler<DerivedEventArgs>((s, e) => derivedEventHandler(s, e))))
        {
            eventAggregationService.Publish(this, new BaseEventArgs());
        }
        // Assert
        Mock.Assert(baseEventHandler);
        Mock.Assert(derivedEventHandler);
    }
}

它应该失败,我在每个lambdas中都放了一个断点,而底座被调用,但不是派生的。我尝试了转移和扭曲的东西,但是我无法弄清楚为什么这项测试会通过,因为确认派生的处理程序被确认不被称为。

自己构建此此内容添加了Nunit,JustMock和RX-Linq Nuget软件包。

啊,您找到了一个错误。我刚刚将修复程序推向了掌握。修复程序将在下一个内部构建中发布。

作为解决方法,您可以明确地断言对活动处理程序的呼叫:

Mock.Assert(() => baseEventHandler(null, null), Args.Ignore(), Occurs.Once());
Mock.Assert(() => derivedEventHandler(null, null), Args.Ignore(), Occurs.Never());

最新更新