首页 / 知识
关于c#:从单元测试中触发UI控件事件
2023-04-17 11:42:00

Firing UI control events from a Unit Test作为TDD的初学者,我正在尝试编写一个假定属性在PropertyGrid(C#,WinForms,.NET 3.5)上更改了属性值的测试。 在属性网格中的对象上更改属性不会触发该事件(这很公平,因为它是UI引发的事件,所以我可以看到为什么更改拥有的对象可能对其不可见)。 当更改SelectedNode属性时,在TreeView上触发AfterSelect也会遇到相同的问题。 我可以有一个函数,我的单元测试可以调用该函数来模拟UI事件将触发的代码,但这会使我的代码混乱不堪,除非我将其公开,否则我必须将所有测试写在我正在测试的对象的相同项目,甚至是类(同样,我认为这很混乱)。在我看来,这很丑陋,并且会遇到可维护性问题。 是否有约定进行此类基于UI的单元测试 要对代码进行单元测试,您将需要模拟UI界面元素的对象。您可以使用许多工具来执行此操作,因此我不推荐一个。我在菲尔·哈克(Phil Haack)的博客中对MoQ和Rhino Mocks有很好的比较,我发现它很有用,也许对您有用。 如果您正在使用TDD,则要考虑的另一件事是创建视图的接口,这将有助于TDD流程。为此有一个设计模型(可能不止一个,但我使用的是一个模型)称为Model View Presenter(现在分为Passive View和Supervisor Controller)。遵循其中之一将使您后面的代码将来更可测试。 此外,请记住,不能通过单元测试来完成对UI本身的测试。另一个答案中已经建议的测试自动化工具将适用于此,但不适用于代码的单元测试。 Microsoft在.Net Framework中内置了UI自动化。您可能可以使用它来模拟以正常方式使用您的软件的用户。 有MSDN文章"使用UI自动化进行自动测试,这是一个很好的起点。 我推荐的一个简单选择是让您的UI在事件触发时调用帮助程序类或方法并对该单元进行测试。确保它(您的UI中的事件处理程序)具有尽可能少的逻辑,然后从那里确定您将要做什么。 在单元测试中很难达到100%的覆盖率。当然,我很难说的是效率低下。我认为,即使您擅长于这种事情,它也可能会给代码库增加比单元测试值得的复杂性。如果不确定如何将逻辑划分为单独的类或方法,这是我想帮助的另一个问题。 我将很感兴趣地看到人们需要使用其他哪些技术来解决此类问题。 |
最新内容
相关内容
linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux命令查看包属性?
linux命令查看包属性?,时间,系统,信息,状态,命令,文件,通讯录,管理,情况,标准,Linux文件相关命令命令一:cat cat命令应该是在Linux中查看文件内linux内核属性命令?
linux内核属性命令?,系统,地址,时间,信息,标准,管理,数据,工作,百分比,内核,一般优化linux的内核,需要优化什么参数1、说起优化,其实最好的优化pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向如何在Python中定义类方法和修改类
如何在Python中定义类方法和修改类属性?,代码,方法,培训,对象,实例,定义,结果,示例,赋值,属性,Python中的类还可定义使用@classmethod修饰的类实现Python对象的持久化存储
实现Python对象的持久化存储,数据,对象,系统,函数,培训,标准,环境,管理,参数,文件,Python中有个序列化过程叫作pickle,它能够实现任意对象与文python之访问对象的元数据
python之访问对象的元数据,数据,异常,培训,属性,模块,对象,类型,定义,文档,实例,当你对一个你构造的对象使用dir()时,可能会发现列表中的很多python之执行对象
python之执行对象,代码,数据,信息,概念,培训,通用,对象,属性,方法,赋值,有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的Python的Unittest单元测试使用详解
Python的Unittest单元测试使用详解,地址,位置,网站,信息,分析,工具,培训,系统,例子,目标,PytheM是一个Python渗透测试框架。它只能在osnGNU/LPython之数据库游标对象详解
Python之数据库游标对象详解,软件,代码,一致,培训,数据库,游标,对象,方法,事务,操作,常用数据库:MySQL、Oracle、SQLite但是包嵌入到Python中python的单元测试框架
python的单元测试框架,代码,生态,信息,标准,测试,分析,工具,环境,条款,活跃,1、AutotestAutotest是Google、Redhat、IBM公司联合开发的分布式