Sau đây là mã. tạo một lớp lib thêm ref vào NUnit framework 2.5.3.9345 và Moq.dll 4.0.0.0 và dán đoạn mã sau. Hãy thử chạy nó trên máy tính của tôi nó némTại sao Moq đang ném "Dự kiến yêu cầu trên mô hình ít nhất một lần". Nơi nó đang được thiết lập một lần, mặc dù nó đang được thiết lập để null?
TestCase
'MoqTest.TryClassTest.IsMessageNotNull'
thất bại: Moq.MockException: Dự kiến
gọi trên giả ít nhất một lần,
nhưng không bao giờ được thực hiện: v => v.Model
= It.Is (giá trị (Moq.It + <> c__DisplayClass21[MoqTest.GenInfo]).match)
1 giả,
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
Action1 setterExpression, Times
1.VerifySet (Action`1
times, String failMessage) at
Moq.Mock
setterExpression) Class1.cs (22, 0): tại
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; }
}
}
Và nếu bạn thay đổi một dòng
mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
để
mockView.VerifySet(v => v.Model, Times.AtLeastOnce());
nó hoạt động tốt.
Tôi nghĩ Ngoại lệ không chính xác.