Moh*_*hit 6 c# nunit unit-testing moq
以下是代码.创建一个类lib将ref添加到NUnit框架2.5.3.9345和Moq.dll 4.0.0.0并粘贴以下代码.尝试在我抛出的机器上运行它
TestCase'MoqTest.TryClassTest.IsMessageNotNull
'
失败:Moq.MockException:
模拟上的预期调用至少一次,
但从未执行过:v => v.Model
= It.Is(value(Moq.It + <> c__DisplayClass2 1 mock, Action 1.VerifySet(Action`1 setterExpression)Class1.cs( 22,0 ):at MoqTest.TryClassTest.IsMessageNotNull()1[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](Mock1 setterExpression, Times
times, String failMessage) at
Moq.Mock
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
如果你换一行
mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
Run Code Online (Sandbox Code Playgroud)
至
mockView.VerifySet(v => v.Model, Times.AtLeastOnce());
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我认为异常是不正确的.
您正在使用以下VerifySet断言:
mockView.VerifySet(v => v.Model = It.Is<GenInfo>(x => x != null));
Run Code Online (Sandbox Code Playgroud)
它基本上说"验证我使用一些非空的GenInfo对象设置Model属性".
然后,使用null对象设置Model属性:
this.view.Model = null;
Run Code Online (Sandbox Code Playgroud)
当然断言失败了.
在第二个VerifySet断言中
mockView.VerifySet(v => v.Model, Times.AtLeastOnce());
Run Code Online (Sandbox Code Playgroud)
你说"断言Model属性是Set,有什么,至少一次".既然你设置了它(虽然是null),当然断言通过了.
我不认为Moq在这里的行为有任何错误.
| 归档时间: |
|
| 查看次数: |
9907 次 |
| 最近记录: |