繁体   English   中英

如何模拟我的主Winform表单的实例来测试一些方法?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM