Dil*_*nan 23 .net c# asp.net unit-testing moq
我正在开发一个尝试使用此示例实现MVP模式的asp.net(经典)应用程序.在尝试对我的演示者进行单元测试并使用以下模式时,psuedocode看起来像这样
//base view interface
public interface IView
{
event EventHandler Init;
event EventHandler Load;
bool IsPostBack { get; }
void DataBind();
bool IsValid { get;}
}
//presenter psuedo code
public class SomePresenter
{
public SomePresenter(ISomeDomainService service, IView someView)
{
...
//HOW DO WE TEST/VERIFY THAT THIS REGISTRATION OCCURS?
someView.Init += OnInit;
someView.Load += OnLoad;
}
}
...
//consuming code that exercises the above code, that needs to be tested
var presenter = new SomePresenter(someDomainService, someView);
Run Code Online (Sandbox Code Playgroud)
如何验证演示者是否正在执行预期的操作,即注册Init和Load事件?虽然这很容易在Phil Haack使用Rhino 模拟的例子中完成...
[Test]
public void VerifyAttachesToViewEvents()
{
viewMock.Load += null;
LastCall.IgnoreArguments();
viewMock.PostSaved += null;
LastCall.IgnoreArguments();
mocks.ReplayAll();
new PostEditController(viewMock,
this.dataServiceMock);
mocks.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)
...我们怎么能用MOQ做到这一点?
Joh*_*nny 31
在moq 4.13介绍了此功能。现在可以验证是否add\remove已被调用。因此引入了四种新方法:
SetupAddSetupRemoveVerifyAddVerifyRemove例子
var mock = new Mock<IAdder<EventArgs>>();
mock.SetupAdd(m => m.Added += (sender, args) => { });
mock.Object.Added += (sender, args) => { };
mock.Object.Added += (sender, args) => { };
mock.VerifyAdd(m => m.Added += It.IsAny<EventHandler>(), Times.Exactly(2));
Run Code Online (Sandbox Code Playgroud)
注意:请注意,为了验证至少应添加一个设置。原因是为了保持与旧版本的向后兼容moq。
| 归档时间: |
|
| 查看次数: |
10504 次 |
| 最近记录: |