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)
1 mock,
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
Aktion1 setterExpression, Times
1.VerifySet(Action`1
times, String failMessage) at
Moq.Mock
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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit den folgenden VerifySet Behauptung:
die im Grunde sagt "stellen Sie sicher, dass ich die Modell-Eigenschaft mit einigen GenInfo Objekt ist nicht null".
Dann legen Sie die Modell-Eigenschaft mit null-Objekt:
Natürlich die assertion fehlschlägt.
In Ihrem zweiten VerifySet Behauptung
sagen Sie "behaupten, dass die Model-Eigenschaft Festgelegt wurde, mit etwas, mindestens einmal". Da hast du es (wenn auch mit einer null), ist natürlich die Behauptung geht.
Ich glaube nicht, dass es irgendeinen Fehler in Moq Verhalten hier.