[英]How can I mock up an instance of my main Winform form to test some methods?
我正在使用Moq(我也是TDD时期的新手)。 我想要Moq我的主要Winforms表单的实例,所以我可以在那里测试一些方法。 这可能吗? 其构造函数采用Assembly()的对象。
我尝试了以下失败的尝试:
var mockMainForm = new Mock<MainForm>();
mockMainForm.Setup(x => x.Assembler).Returns(new Assembly());
return mockMainForm.Object;
但是一旦返回该对象,我将无法访问该对象的任何属性或方法。
这可能吗?
但是我得到错误(失败:System.ArgumentException:Expression不是方法调用:x => x.Assembler at Moq.ExpressionExtensions.ToMethodCall(LambdaExpression expression))
使用Moq进行模拟只会模拟类的接口和虚拟方法。 Assembler
属性需要定义为virtual
。
在任何情况下,模拟Windows窗体都不是一个很好的嘲弄 - 它有一大包WIN32的东西,使你的测试变得脆弱。 如果需要单元测试并模拟表单,请创建表单需要实现的接口,并为需要与表单交互的对象模拟该接口。
public interface IHasAssembler
{
Foo Assembler {get; set;}
}
public class MyForm : IHasAssembler
{
//
}
然后模拟界面而不是表单:
Mock<IHasAssembler> myMock = new Mock<IHasAssembler>();
我从没使用过Moq(或者确实听说过Moq),但是我猜想mockMainForm.Object
的类型为Form
,并且可以mockMainForm.Object
为:
object moqObject = MakeMoqOfMyMainForm();
Form mainForm = (Form)moqObject;
(如果我错了,请告诉我,我将删除此答案)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.