A continuación se muestra el código. crea una lib de clase agrega la referencia a NUnit framework 2.5.3.9345 y Moq.dll 4.0.0.0 y pega el siguiente código. Pruebe a ejecutar en mi máquina que lanzaPor qué Moq lanza "Invocación esperada en el simulacro al menos una vez". ¿Dónde, como se establece una vez, a pesar de que se establece en nulo?
TestCase
'MoqTest.TryClassTest.IsMessageNotNull'
fallado: Moq.MockException: Se espera
invocación en el simulacro al menos una vez,
pero nunca se llevó a cabo: v => v.Model
= It.Is (valor (Moq.It + <> 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
Acción1 setterExpression, Times
1.VerifySet (Action`1
times, String failMessage) at
Moq.Mock
setterExpression) Class1.cs (22, 0): en
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; }
}
}
Y si cambia una línea
mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
a
mockView.VerifySet(v => v.Model, Times.AtLeastOnce());
funciona bien.
Creo que la excepción es incorrecta.