引言
在软件开发领域,测试驱动开发(Test Driven
Development
,TDD
)技术在逐渐为广大开发者所接受,它是在添加新代码
之前让你的测试代码出错的一种开发技术。在开始编写代码之前首先要写你的测试代码,然后再编写代码让你的测试通过,可以想象,如果没有一个好的单元测试工
具,这项工作其实是无法完成的。相信很多.NET
开发人员者对于开源的NUnit
都不陌生,但是它并不能很好的与Visual
Studio.NET IDE
集成起来。
这里我将向大家介绍另一款优秀的单元测试工具——TestDriven.NET
2.0
。它是以插件的形式集成在Visual Studio.NET IDE
中的
单元测试工具,能够兼容各种Visual Studio
版本,并且集成了多种单元测试框架诸如NUnit
,MbUnit
,以及Visual Studio Team System
适配器等。
TestDriven.NET
的前身是NUnitAddIn
,由Jamie Cansdale
大
师开发,一开始作者只是想做一个NUnit
插件集成到Visual
Studio
中,经过多次版本更新,NUnitAddIn
在2004
年9
月底更名为TestDriven.NET
,并在当年的12
月初发布
了它的第一个Release
版本,即TestDriven.NET
1.0
。由于它在开发中的出色表现,让很多开发人员期待它的下一个版本的发布,这一等待却足足等了两年,在今年的10
月底,终于迎来了姗姗来迟的TestDriven.NET 2.0
版
本。然而这一等待却是值得的,在2.0
中,给我们带来了太多的惊喜,它集成了.NET Reflector
、NConver
、NConverExplorer
、TypeMock.NET
等,
功能更加强大,下面我将一一介绍TestDriven.NET 2.0
中涌现出的这些亮点。
基本使用
安装完TestDriven.NET 2.0
后,重新启动Visual
Studio 2005
,可以发现在Visual Studio.NET IDE
的
右键菜单中会多出一些新项,所有的操作都是直接通过这些右键菜单来完成。我们先来编写一小段简单的测试代码:
[Test
]
public
void
TestMethodRun()
{
ClassA
ca = new
ClassA
();
int
expected = 2;
int
result = ca.GetResult();
Assert
.AreEqual(expected, result);
}
在以前如果您使用NUnit
进行单元测试,对于这样一个简单的测试,首先需要运行NUnit
GUI
,加载当前的程序集,并点击Run
按钮运行测试,测试通过后再回到IDE
继续编写代码:
现在有了TestDriven.NET 2.0
,就不会有这么麻烦了,我们不用额外运行任何程序,只需要在Visual Studio 2005 IDE
中右击并选择Run
Test
菜单命令就可以运行测试,日常开发中我们都已经习惯了在IDE
中进行这种操
作,所以这样更加符合我们的开发习惯,也不用频繁在应用程序之间切换窗口。
TestDriven.NET 2.0
测试的结果将在Output
窗
口中显示。
稍微写过一点单元测试
代码的朋友都知道,实际开发中的每一个测试,测试方法都不可能只有一个断言(Assert
),在以
前使用NUnit
时,测试如果通不过,我们无法根据错误信息快速准确的定位到代码中的某一个断言,
有了TestDriven.NET 2.0
,当测试出现错误时,您只需要在Output
窗口中双击错误提示,就可以直接定位到出错的断言代码行,极大的提高了排错的效率。
在上面的测试代码中,
我们仅仅是点击了右键菜单Run Test
,并没有选择运行哪一个测试方法或者测试类,那么TestDriven.NET 2.0
是如何选择并运行测试的呢?其实这跟我们点击鼠标的位置有关,点击鼠标
的位置如果在标记为Test
的测试方法内,它只会执行该测试方法;点击鼠标的位置如果在方法之外而
在标记为TestFixture
的类里面,它会执行该类中所有标记为Test
的测试方法;点击鼠标的位置如果在类之外,而在某一个命名空间里面,则它会执行该命名空间下所有标记为TestFixture
的测试类。
Ad-Hoc
测试
在开发中,我们常常会
遇到跟踪一些变量的值和某些方法的返回值,一般情况下大家都会选择使用Command Window
,
这种方式需要通过输入一些命令来查看,未免有些麻烦。TestDriven.NET 2.0
为我们
提供了一键操作的功能,让我们可以随时随地的跟踪方法的返回值等,而不用输入任何命令。在普通的方法中TestDriven.NET
2.0
也可以运行测试(Run Test
),不管方法的作用域是public
还是private
,是实例方法还是static
方法。如果测试方法是实例方法,它会使用默认的构造函数创建一个类的对象,在执行测试完成时再释
放掉该对象。如果方法有返回值,将会显示在Output
窗口中。运行下面的测试:
会在Output
窗口中输出:
用
Debug
模式测试
在运行测试的过程中,
有时候需要调试跟踪一些信息,如果使用NUnit
,由于它没有集成在IDE
中,也就无法设置断点。在TestDriven.NET 2.0
提
供了以Debug
模式进行测试,可以在测试代码中设置断点,并进行跟踪,这时我们需要选择Test with | Debugger
菜单命令。
停止测试进程
在运行测试过程中,有
时候会有创建一些应用程序域,但并没有被释放,这样会有部分程序集被加载该应用程序域中并且已经锁定,所以可能会造成编译失败。这时需要释放掉一些测试进
程来可以继续编译。在任务栏的右下角,所有的测试进程都会显示在这里,点击右键,选择Stop
菜单
命令可以结束测试进程。
集成
Reflector
.NET Reflector
是一个.NET
平台
下的类浏览器和反编译工具,我们可以用它来浏览程序集的类和方法,可以分析由这些类和方法生成的中间语言
(MSIL)
,相信大家都用过,但它仍然是作为一个独立的工具存在的,在TestDriven.NET
2.0
中它被很好的集成在了Visual Studio.NET IDE
,通过右
键菜单,就可以直接使用.NET Reflector
。

集成代码覆盖率分析工具
在做单元测试的时候,
我们总是希望知道自己的代码有多少覆盖到了,哪些代码是没有测试到的,如果没有安装Visual Studio
Team System
,无法用Team Converage
进行代码覆盖率的分
析,这时使用大名鼎鼎的NConver
是一个不错的选择,并且使用NconverExplorer
可以去查看分析结果,所有这些仍然需要运行新的应用程序,TestDriven.NET 2.0
把这一切都集成到了IDE
中,
可以在没有安装Team System
的环境下使用Team
Converage
,也不用单独安装NConver
。
重复运行测试
重复运行测试可以说是TestDriven.NET 2.0
的
一大亮点。TestDriven.NET2.0
出现之前,如果在运行测试的过程中,测试代码不能通
过,这时我们会花几秒钟时间去修改测试代码,并再次运行测试,但是往往却发现找不到刚才测试的是哪个代码块,这时您可以使用重复运行测试命令,不管你鼠标
点击的位置在哪儿,它都会直接运行上一次的测试。
可插拔的单元测试框架
在.NET
平台下,单元测试框架有很多,TestDriven.NET
2.0
不可能把所有的单元测试框架尽收其中,但是它提供了一种很好的可插拔的机制。当你安装一种新的测试框架后,TestDriven.NET 2.0
会自动在它的菜单中出现这一项,在测试项目上点右键选择Test With
菜单命令,可以选择使用哪一个单元测试框架。
集成
TypeMock.NET
在做单元测试的过程
中,最麻烦的部分就是我们的测试代码必须依赖于系统的其他部分,如数据库等。这时候我们会使用一类替代品来代替这些真实的对象,即使用Mock
对象,幸运的是我们不用每次都去实现自己的Mock
对
象,在.NET
平台下,有很多款Mock
对
象的框架供我们选择。在TestDriven.NET 2.0
出现之前,使用哪个Mock
对象的框架,我们需要去下载并安装它们,在TestDriven.NET
2.0
中已经集成了TypeMock.NET
框架,这使得我们可以很方便的直接
使用而不用再去自行选择。
结束语
如果只做单元测试,我
会选择Nunit
;如果要进行类库反编译,我会选择.NET
Relector
;如果要分析代码的覆盖率,我会选择NConver
;如果要查看
代码覆盖率的分析结果,我会选择NConverExplorer
,但如果要把以上所有的事情集成在IDE
中一起去做,那毫无疑问,我会选择TestDriven.NET
2.0
。希望我这篇文章能抛砖引玉,引领大家使用TestDriven.NET 2.0
,
走上单元测试之路。当然对于TestDriven.NET 2.0
它的专业版和开发版已经开始收
费,只有个人版仍然可以免费下载使用。
有关TestDriven.NET 2.0
的详细信息请访问:http://www.testdriven.net/
分享到:
相关推荐
“TestDriven_NET2_0——单元测试的好助手.txt”很可能是关于如何使用TestDriven.NET的指南或教程,包含了详细的步骤和最佳实践,对于初学者或者想要提升单元测试技能的开发者来说,这将是一份宝贵的参考资料。...
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
labelme标注的json转mask掩码图,用于分割数据集 批量转化,生成cityscapes格式的数据集
(参考GUI)MATLAB GUI漂浮物垃圾分类检测.zip
人脸识别项目源码实战
人脸识别项目实战
本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) CSDN详情地址:https://blog.csdn.net/qq_50594161/article/details/146242453sharetype=blogdetail&sharerId=146242453&sharerefer=PC&sharesource=qq_50594161&spm=1011.2480.3001.8118
实战练习分词、创建词表、文本处理
在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。
人脸识别项目源码实战
学生信息管理系统是一个基于Java Web技术的综合性管理平台。通过此系统,可以实现对学生、教师、选课信息等的动态管理, 提升学校管理效率。系统采用分层架构设计,前端使用HTML、CSS,JavaScript和jQuery,后端基于Servlet,JSP和Spring框架,数据库采用MySQL。主要有四个大功能,学生管理( 增加学生信息、删除学生信息、修改学生信息、查询学生信息)、教师管理(增加教师信息、删除教师信息、修改教师信息、查询教师信息)、选课信息管理(添加选课、查询选课情况、删除选课记录)、系统管理( 登录与注册功能、 用户角色管理(老师,学生,管理员)、系统日志查看)。 技术架构 1.前端技术 HTML,CSS:静态页面布局与样式 JavaScript,jQuery:动态交互、DOM操作和AJAX请求 2.后端技术 Servlet:控制层,处理用户请求 JSP:页面动态生成 Spring:依赖注入,业务逻辑分离 3.数据库 MySQL:存储学生、教师,课程等数据 JDBC:数据库连接与操作
本课程是 PHP 进阶系列之 Swoole 入门精讲,系统讲解 Swoole 在 PHP 高性能开发中的应用,涵盖 协程、异步编程、WebSocket、TCP/UDP 通信、任务投递、定时器等核心功能。通过理论解析和实战案例相结合,帮助开发者掌握 Swoole 的基本使用方法及其在高并发场景下的应用。 适用人群: 适合 有一定 PHP 基础的开发者、希望提升后端性能优化能力的工程师,以及 对高并发、异步编程感兴趣的学习者。 能学到什么: 掌握 Swoole 基础——理解 Swoole 的核心概念,如协程、异步编程、事件驱动等。 高并发处理——学习如何使用 Swoole 构建高并发的 Web 服务器、TCP/UDP 服务器。 实战项目经验——通过案例实践,掌握 Swoole 在 WebSocket、消息队列、微服务等场景的应用。 阅读建议: 建议先掌握 PHP 基础,了解 HTTP 服务器和并发处理相关概念。学习过程中,结合 官方文档和实际项目 进行实践,加深理解,逐步提升 Swoole 开发能力。
人脸识别项目实战
人脸识别项目实战
功能简介:本工具可实现批量对照片文件的人脸识别,并按指定分辨率进行转换保存。 可为人脸识别采集系统提供很好的辅助工具。 软件基本于OPENVC开发,识别精确,转换高效。 人脸识别工具 +人脸采集处理
内容概要:本文探讨了利用肌长变化反馈控制(FCM-ML)和演员-评论家强化学习(ACRL-NGN)来有效实现人体上肢和下肢无意识姿态稳定的算法方法。通过构建一个包含949条肌肉和22个关节的全身计算模型,在不同初始姿势的情况下进行模拟试验,验证了这些方法的有效性和鲁棒性,结果显示FCM-ML方法比其他传统方法更适用于此类任务。研究指出人类及其他脊椎动物在无意识状态下,通过抗拮抗性的肌肉长度变化反馈机制来维持舒适状态下的自然身体姿势(NBP)。此外,研究还表明这种控制策略有助于机器人设计、运动员训练以及康复患者的治疗。 适用人群:生物力学、机器人学以及神经科学领域的研究人员、工程师,以及关注人体姿态控制及其应用的学者和技术人员。 使用场景及目标:①解释人和非人的脊椎动物如何在无意识情况下维持最佳姿势,特别是处于重力环境中的自然身体姿势(NBP)。②为机器人肌肉控制提供理论支持和发展方向,特别是在模拟多肌肉协调控制方面。③指导运动训练及病患恢复计划的设计与优化。 其他说明:研究发现ACRL-NGN结合FCM-ML不仅能够迅速有效地实现期望的姿态稳定性,而且不需要对肌肉分类,这使其在复
反编译apk重要的工具之一
人脸识别项目实战
FDTD复现圆偏振超透镜 ,FDTD; 复现; 圆偏振; 超透镜;,FDTD技术在超透镜复现圆偏振的实践