Warum Moq ist, werfen "erwartete den Aufruf auf der mock mindestens einmal". Wo, wie es wird, einmal festgelegt,auch wenn es auf null gesetzt?

Folgende code ist der code. erstellen Sie eine Klasse lib fügen Sie den ref zu NUnit-framework 2.5.3.9345 und Moq.dll 4.0.0.0 und fügen Sie den folgenden code. Versuchen, läuft es auf meinem Rechner wirft

TestCase

'MoqTest.TryClassTest.IsMessageNotNull'

fehlgeschlagen: Moq.MockException : Erwartete

Aufruf mock mindestens einmal,

wurde aber nie durchgeführt: v => v. Modell

= Es.Ist(Wert(Moq.Es+<>c__DisplayClass21[MoqTest.GenInfo]).match)
at
Moq.Mock.ThrowVerifyException(IProxyCall
expected, Expression expression, Times
times, Int32 callCount) at
Moq.Mock.VerifyCalls(Interceptor
targetInterceptor, MethodCall
expected, Expression expression, Times
times) at
Moq.Mock.VerifySet[T](Mock
1 mock,

Aktion1 setterExpression, Times
times, String failMessage) at
Moq.Mock
1.VerifySet(Action`1

setterExpression) Class1.cs(22,0): bei

MoqTest.TryClassTest.IsMessageNotNull()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Moq;
using NUnit.Framework;

namespace MoqTest
{
    [TestFixture]
    public class TryClassTest
    {
        [Test]
        public void IsMessageNotNull()
        {
            var mockView = new Mock<IView<GenInfo>>();
            mockView.Setup(v => v.ModuleId).Returns("");

            TryPresenter tryPresenter = new TryPresenter(mockView.Object);
            tryPresenter.SetMessage(new object(), new EventArgs());
            //mockView.VerifySet(v => v.Message, Times.AtLeastOnce());
            mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
        }
    }

    public class TryPresenter
    {
        private IView<GenInfo> view;
        public TryPresenter(IView<GenInfo> view)
        {
            this.view = view;
        }

        public void SetMessage(object sender, EventArgs e)
        {
            this.view.Model = null;
        }
    }

    public class MyView : IView<GenInfo>
    {
        #region Implementation of IView<GenInfo>

        public string ModuleId
        {
            get; set;
        }

        public GenInfo Model
        {
            get; set;
        }

        #endregion
    }

    public interface IView<T>
    {
        string ModuleId { get; set; }
        T Model { get; set; }
    }

    public class GenInfo
    {
        public String Message { get; set; }
    }
}

Und wenn Sie ändern eine Zeile

mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));

zu

mockView.VerifySet(v => v.Model, Times.AtLeastOnce());    

funktioniert es einwandfrei.

Ich denke, Ausnahme ist falsch.

InformationsquelleAutor Mohit | 2010-04-05
Schreibe einen Kommentar